gdb多线程调试技巧

实习的项目需要用到gdb多线程调试,故搜索记录下常用语句,以便日后查询。

内容整理自网络。

常用命令:

*可直接输入简写语句,也可输入完整语句。
1.b main.cpp:15 在main.cpp的第15行打断点。后面可接条件,如if i==2,则仅当满足条件时,断点生效。
2. r [option] 是run的简写。继续运行,如后面无断点,则程序会一直运行至最后。
3. n 是next的简写,运行下一行。
4. s 是step的简写,进入下一个要执行的函数内部。
5. start 单步执行,开始程序,停止在第一行。
6. set var a=1 设置变量值,此处把变量a设为1。
7. bt 查看函数调用栈帧和堆栈。
8.c 是continue的简写,继续运行。
8. p a 是print的简写,打印变量值,此处为打印变量a的值。
9. info 用于查看信息,如 info break 可查看断点情况。
10. d bID,d是del的简写,可删除断点,bID是断点编号,可通过上述命令查询。
11. dispaly a 每一步执行,都会打印该变量,此处为打印a。
12. undispaly dID,上一步的逆操作,取消打印某变量。注意此处dID为编号,非变量名。需通过info display查看编号。
13. q 是quit的简写,退出gdb。

多线程命令:

1.info threads ,查看当前进程的线程。gdb会为每个线程分配一个ID,前面带“*”的表示当前运行的线程。
2.thread ID,切换调试的线程。
6. b main.c:10 thread all.为所有线程打断点。
7. set scheduler-locking off|on|step
8. thread apply ID1 ID2 command ID1 ID2执行命令。
9. thread apply all command 所有线程执行。

调试宏定义:

由于宏是预编译的,默认无法打印。若需调试宏定义,需在编译程序时加上参数 -ggdb3

发布了11 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/DJ_xiaoming/article/details/104376777