实习的项目需要用到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