1.常用gdb调试命令:
1. 运行程序:
- run (r):从头开始执行程序。
- run args (r args):使用命令行参数运行程序。2. 断点操作:
- break (b):在特定行或函数设置断点。
- info breakpoints (i b):列出当前设置的所有断点。- delete (d):删除所有断点。
- delete 2:删除特定序号的断点(本句删除断点2)。
- clear (cl):删除当前行断点。
- clear 2:删除特定行的断点(本句删除第二行断点)
3. 执行控制:
- continue (c):继续程序执行,直到下一个断点或程序结束。
- next (n):执行下一行代码,跳过函数调用。
- step (s):执行下一行代码,进入函数调用。
- finish (fin):执行直到当前函数结束。- jump (j):跳转到有断点的指定行。
4. 变量操作:
- print (p):打印变量的值。
- set (set):修改变量的值。
- display (disp):在每一步之后显示变量的值。
- watch (w):设置变量的监视点,在其值发生变化时触发。
- whatis (whatis):显示变量的类型。
- info locals (i locals):列出当前帧中的所有局部变量。5. 调用堆栈:
- backtrace (bt):打印函数调用堆栈。
- frame (f):选择特定的堆栈帧进行检查。6. 源代码操作:
- list (l):显示当前行附近的源代码。7. 多线程调试:
- info threads (i threads):列出程序中的所有线程。
- thread (th):选择特定的线程进行检查。8. 其他命令:
- detach (detach):从正在运行的程序中分离GDB。
- quit (q):退出GDB。
还有许多其他命令可用,在GDB文档中可找到更详细的信息,或者使用GDB中的"help"命令获取帮助。
GDB的5个高级调试技巧,只会打断点看变量的你必须收藏
2.其他GDB调试命令:
1.gtest中调试指定文件
gdb --args ./gtest --gtest_filter=GCIConnectionPoolCreate_test.*
b GCIConnectionPoolCreate_test.cpp:50
2.layout使用
layout next:显示汇编语言
layout prev:回到上一模式
3.bt
当程序突然崩溃的时候,可以使用gdb附着到程序中,然后执行bt命令来查看最新的堆栈信息,这往往能够很快定位到问题的原因
4.thread apply all bt
查看当前进程的所有线程的堆栈信息
5.watch技巧:写时watch和读时watch
watch一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果变化则停住程序。
watch <expr>:为表达式expr设置一个观察点。一旦表达式值有变化时,马上停住程序。
rwatch <expr>:当表达式expr被读时,停住程序。
awatch <expr>:当表达式的值被读或被写时,停住程序。
info watchpoints:列出当前所设置了的所有观察点。
6.单步跟踪机器指令
stepi(缩写si)和nexti(缩写ni)
stepi和nexti用于单步跟踪一条机器指令,一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令,这个在调用一些算法或O2优化问题时特别有用。
7.call
在GDB(GNU调试器)中,call
是一个用于调用函数的命令。它允许您在调试过程中直接调用程序中定义的函数,并在调试会话中查看函数的结果。
(gdb) call printf("asdasdasda\n")
$1 = 10
GDB会将返回值存储在
$1
变量中,可以使用p $1
命令来查看它的值。