gdb是Linux操作系统下基于命令行的程序调试工具。
以C++为例,测试程序为test.cpp,通过makefile或者命令gcc生成可执行文件test:
//-g为了调试用的 ,加个-g 是为了gdb 用,不然gdb用不到 //-o output_filename,确定输出文件的名称为output_filename,不能和源文件同名 //-c 只编译不链接,生成目标文件而不是可执行文件 gcc -g test.cpp -o test
启动gdb:
gdb test//不打印gdb版本信息 gdb -q test//打印gdb版本信息
查看代码:l(list),默认显示10行,按回车键继续查看;
运行程序:r(run),运行程序直到结束或遇到断点
c(continue),继续执行程序,直到下一个断点或者结束
设置断点:b(break) xxx,在第xxx行设置断点
delete n:删除断点编号为n的断点
info breakpoints,显示断点信息
(gdb) info breakpoints //Num:断点编号 //Disp:断点执行一次之后是否有效 kep:有效 dis:无效 //Enb: 当前断点是否有效 y:有效 n:无效 //Address:内存地址 //What:位置 Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004030d0 in main(int, char**) at test.cpp:62
单步执行:n(next),单步执行程序,但是遇到函数时不进入函数
s(step),单步执行程序,但是遇到函数会进入函数
退出gdb:q(quit),退出gdb调试
查看运行信息:info program,来查看程序的是否在运行
bt,显示当前运行的堆栈列表
set args xxx,指定运行时的参数为xxx
show args:查看设置好的参数
多进程/多线程调试:attach pid,将PID为pid的进程附加到gdb调试器上(调试该进程)
info threads,显示当前可以调试的所有线程
thread id,调试ID为id的线程