简单的gdb调试多线程

利用gdb调试多线程有以下命令:
1.info threads:显示可以调试的所有线程。gdb会为每个线程分配一个ID(和tid不同),编号一般从1开始。后面的ID是指这个ID。
2.thread ID:切换当前调试的线程为指定ID的线程。
3.break FileName.cpp:LinuNum thread all:所有线程都在文件FileName.cpp的第LineNum行有断点。
4.thread apply ID1 ID2 IDN command:多个线程执行gdb命令command。
5.thread apply all command:所有线程都执行command命令。
6.set scheduler-locking off|on|step:在调式某一个线程时,其他线程是否执行。off,不锁定任何线程,默认值。on,锁定其他线程,只有当前线程执行。step,在step(单步)时,只有被调试线程运行。
7.set non-stop on/off:当调式一个线程时,其他线程是否运行。
8.set pagination on/off:在使用backtrace时,在分页时是否停止。
9.set target-async on/ff:同步和异步。同步,gdb在输出提示符之前等待程序报告一些线程已经终止的信息。而异步的则是直接返回。

我们来举一个例子:


使用gdb调试,过程如下:

1.加断点


2.开始运行


3.查看线程信息


4.可以看到ID为2的线程执行了该断点


5.我们来切换到线程3,看一看线程3执行到了哪里


说明:

(1)打断点的时候可以写break +行号,也可以简写成b +行号,取消断点时,用d +行号

(2)让所有线程打印堆栈信息使用thread apply all bt

猜你喜欢

转载自blog.csdn.net/cherrydreamsover/article/details/80149209