首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GDB多线程调试分析

0x00: 在Linux系统上Gdb提供了一组多线程调试命令,如表所示: ?...0x01:Gdb在linux平台多线程调试实现主要依赖下面三个文件 ? thread.c:文件它的任务非常简单,就是多线程调试命令子集的实现,比如info threads。...当用户在gdb命令行敲入多线程调试命令子集中的命令时,就会调用thread.c中对应的函数。Thread.c中的实现都是基于thread list的。...这些问题gdb分层机制能解释。 Gdb中把target_ops分为了7层,每一层负责不同的功能。如图所示: ? 0x03:GDB调试多线程 调试进程建立具体的流程下图所示: ?...0x04:总结 GDB确定我们调试的程序是否为多线程, 通过判断被调试程序是否加载libpthread库来判断的。

1.5K10

gdb调试多线程多进程

1、info threads:   这条命令显示的是当前可调试的所有线程,GDB会给每一个线程都分配一个ID。前面有*的线程是当前正在调试的线程。...-g -rdynamic   在生成调试信息的时候加入 -g -rdynamic选项,然后gdb启动调试程序时,直接run,就能找出错误信息所在的地方 一个小提示: 在输入gdb xx时,进入gdb命令...如上所示,这些信息大多都是关于gdb的一些信息,可以不让他输出, 如:gdb -q xx ? 这里面a是我生成的调试信息的文件名。...多进程   默认设置下, 在调试多进程程序时 GDB 只会调试主进程. 但是 GDB > V7.0 支持多进程的分别以及同时调试, 换句话说, GDB 可以同时调试多个程序....默认) child on 只调试子进程 parent off 同时调试两个进程,gdb 跟主进程, 子进程 block 在 fork 位置 child off 同时调试两个进程, gdb 跟子进程,

1.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言:---gdb多线程调试

    GDB有能力在你调试程序的时候处理任何一种信号,你可以告诉GDB需要处理哪一种信号。你可以要求GDB收到你所指定的信号时,马上停住正在运行的程序,以供你进行调试。...passnoignore 当被调试的程序收到信号时,GDB不处理信号。这表示,GDB会把这个信号交给被调试程序来处理。...3)线程(Thread Stops) 如果你程序是多线程的话,你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。GDB很容易帮你完成这一工作。...一般说来,GDB会根据你所调试 的程序来确定当然的调试语言,比如:发现文件名后缀为“.c”的,GDB会认为是C程序。...也就是说,GDB会根据你所调试的程序的语言,来设置自己的语言环境,并让GDB的命令跟着语言环境的改变而改变。

    2.2K20

    Linux多进程和多线程的一次gdb调试实例

    Linux C/C++开发中gdb进行多进程和多线程的调试一直比较麻烦,在CSDN上看到高科的一篇文章《gdb调试多进程和多线程命令》比较有启发,这里就自己重新整理并做了一个GDB多进程/线程的调试实践...gdb7以上的版本(gdb --version)支持多进程调试,只需要设置好follow-fork-mode(fork追踪模式)以及detach-on-fork(指示GDB在fork之后是否断开某个进程的调试...[vfhky@typecodes pthread_key]$ gdb gdb_pthread GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7 Copyright...进程)为23859,同时这也是追踪进程ID,线程数Threads为1(共享使用该信号描述符的线程数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符)。...(gdb) b gdb_pthread.c:50 Breakpoint 3 at 0x4008a7: gdb_pthread.c:50. (2 locations) (gdb) c

    34010

    GDB调试

    回车在GDB相当于重复上一个命令。 启动GDB运行程序 运行GDB调试a.out程序有以下几种方式: 方式一:直接运行gdb,然后在gdb中执行“file a.out”加载程序。...方式二:gdb ,命令行给出可执行程序运行,即运行“gdb a.out” 方式三:gdb ,带core文件运行,“gdb a.out /tmp...方式五:对运行中的a.out,可以先按方式二启动,然后在gdb中中心“attach 19475”调试运行中的a.out 进入到GDB后,可以通过help命令来获取帮助,GDB对命令做了分类,要获取详细说明可以查看...暂停、恢复程序运行 调试程序,首先是要让程序是某些感兴趣的点上停下来,GDB有以下几种方式通知GDB暂停程序的运行:断点、观察点、捕捉点(GDB中这三种都统称为断点breakpoints)、信号、线程停止...(gdb) set $i = 0 (gdb) p arr[$i++] $i就是方便变量,后面通过回车就可以不断打印arr中的值。

    2.2K10

    GDB高级技巧

    GDB高级技巧 yijian 2009-2-22 难得有雅兴,边动手边记录操作步骤,本文主要示例一些平常较少使用到的GDB功能,掌握这些用法有助于提高GDB调试和解决问题的能力。...1) 查看宏 默认情况下,在GDB中是不能查看宏的值及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令...使用“rb”命令,如果执行“rb”时不带参数,则表示在所有函数处打一个断点,“rb”后面可以接一个符合正则表达式的参数,用来对符合正则表达式的所有函数打断点 4) .gdbinit文件 GDB在启动时...如果想在命令执行完,再执行某个或某些命令,则: #define hookpost-print echo ----------\n end 7) GDB中循环 GDB支持if/else/while.../loop_break/loop_continue,如: (gdb) set $x=1 (gdb) while $x==1  >p $x  >set $x=0  >p $x  >end -

    1.5K10

    GDB调试学习

    简介 GDB是GCC的调试工具。其功能如下: 启动程序,使程序按自定义形式运行; 使程序停止指定断点位置; 程序停止后,检查程序执行中的相应情况; 动态改变程序执行环境。...gdb调试 能进行GDB调试,一般在编译过程中,需使用-g参数。如果不使用-g参数,则在gdb调试过程中,将不能得到程序的函数名、变量名等信息,而只能看见运行时内存地址。...q:退出gdb调试环境。 help [命令名称]:gdb帮助命令,提供对GDB各种命令的解释说明。...如果指定了“命令名称”参数,则显示该命令的详细说明;若果没有指定参数,则分类显示所有GDB命令,共用户进一步浏览和查询。 cd dir:运行GDB,使用dir作为gdb的工作目录。...gdb filename // 其中filename为可执行文件名 gdb filename core // core是程序core dump产生的文件,产生core文件,需设置栈大小无线使用ulimit

    1.4K20

    GDB调试技巧】提高gdb的调试效率

    gdb的启动 准备内容 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。...gdb program core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。...gdb program 1234 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。...GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb的help查看。 gdb技巧 1. gdb小技巧汇总 gdb技巧挺多的,比如说直接回车是继续执行上一次的代码 巧用tab补全 1....比如输入b连续按下两次tab,可以查看gdb的所有b开头的gdb指令 2.

    18510

    gdb 基础命令

    命令 解释 示例 file 加载被调试的可执行文件 如果执行gdb与被调试的程序不在同个目录,则需要带上路径 (gdb) file gdb_sample l List 的缩写,打印源码...在gcc/g++ 编译程序时,需要加上-g 选项 (gdb) l 1 r Run 的缩写,运行程序 (gdb) r c Continue 的缩写,继续执行程序,直到下一个断点或程序结束 (gdb...(gdb) n p Print 的缩写, 打印变量的值 (gdb) p i bt Backtrace 的缩写,查看堆栈信息 (gdb) bt q Quit 的缩写,退出gdb 调试环境...月 9 17:19 gdb_sample 可以用 gdb gdb_sample 直接进入调试环境,也可以先启动gdb,再打开可执行文件: GNU gdb (GDB) Red Hat Enterprise...(gdb) 上面表示可执行文件已经加载成功,(gdb) 是gdb内部命令引导符,等待用户输入命令 下面使用l 命令来查看源码,可以指定行号,回车可以继续往下查看: (gdb) l 1 1

    1.1K220
    领券