list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。
breaktrace(bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值 info break :查看断点信息。 finish:执行到当前函数返回,然后挺下来等待命令 print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数 set var:修改变量的值 continue(或c):从当前位置开始连续而非单步执行程序 delete breakpoints:删除所有断点 delete breakpoints n:删除序号为n的断点 disable breakpoints:禁用断点 enable breakpoints:启用断点 info(或i) breakpoints:参看当前设置了哪些断点 display 变量名:跟踪查看一个变量,每次停下来都显示它的值 undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
显示所有的断点:info br
删除断点:
按断点序号:delete [breakpoints num] [range...]
例如:
delete 5
delete 1-10
按断点所在位置: clear [line numbers]
例如:
clear list_insert //删除函数的所有断点
clear list.c:list_delet //删除文件:函数的所有断点
clear 12 //删除行号的所有断点
clear list.c:12 //删除文件:行号的所有断点
多线程调试:
分为两种模式:all-stop模式和no-stop模式.(gdb7.0之前不支持no-stop模式)
1.all-stop:
当程序在gdb因某种原因停止时,所有的线程都会停止.一般来说,gdb不能够单步所有线程,因为线程调度室gdb无法控制的(???).无论何时,当gdb停止你的程序时.它都会自动切换到触发断点的那个线程.
2.no-stop:(网络编程常用)
只是当前线程会被停止,而其他线程将会继续运行.此时step,next只对当前线程起作用.
gdb调试多线程常用命令:
(1)info threads : 显示可以调试的所有线程
(2)thread ID : 切换到指定ID的线程
(3)其他 break FileName.cpp:LinuNum thread all
:
所有线程都在文件FileName.cpp的第LineNum行有断点。
thread apply ID1 ID2 IDN command
:
让线程编号是ID1,ID2…等等的线程都执行command命令。
thread apply all command
:所有线程都执行command命令。
set scheduler-locking off|on|step
:
在调式某一个线程时,其他线程是否执行。在使用step或continue命令调试当前被调试线程的时候,其他线程也是同时执行的,如果我们只想要被调试的线程执行,而其他线程停止等待,那就要锁定要调试的线程,只让他运行。
off
:不锁定任何线程,默认值。 on
:锁定其他线程,只有当前线程执行。
step
:在step(单步)时,只有被调试线程运行。
set non-stop on/off
:
当调式一个线程时,其他线程是否运行。
set pagination on/off
:
在使用backtrace时,在分页时是否停止。
set target-async on/ff
:
同步和异步。同步,gdb在输出提示符之前等待程序报告一些线程已经终止的信息。而异步的则是直接返回。
show scheduler-locking
:
查看当前锁定线程的模式
参考文献:
gdb断点删除:https://blog.csdn.net/u013022517/article/details/48288353
gdb调试多进程多线程程序:https://www.cnblogs.com/JN-PDD/p/6953136.html
gdb调试多进程与多线程:https://blog.csdn.net/snow_5288/article/details/72982594