准备
一般来说GDB用于C/C程序的调试。要调试C/C程序,需要在编译时将调试信息加到可执行文件中(默认不加,加了这些调试信息后可执行文件将变大)。使用编译器(gcc/g++/clang等)的-g参数可以做到这一点。
1
| $ g++ -g main.cpp -o pro
|
如果不加-g参数进行编译,将看不见程序的函数名、变量名,只能看见运行时的内存地址。
启动GDB
program是需要进行调试的可执行文件,一般在当前目录下。
程序运行参数
制定运行时参数:
1 2
| $(gdb) set args $(gdb) set
|
查看已设置的运行时参数:
启动调试
断点
设置
1.程序在执行指定行之前停止
1
| $(gdb) break line-number
|
2.程序在进入指定函数前停止
1
| $(gdb) break function-name
|
3.若condition为真,程序到达指定行或函数时停止
1
| $(gdb) break line-or-function if condition
|
4.在指定例程的入口处设置断点
1
| $(gdb) break routine-name
|
查看
清除
清除某个断点
1
| $(gdb) delete break-number
|
清除所有断点
不同文件设置断点
1
| $(gdb) break filename:line-number
|
其他断点类似上述操作
条件断点
1 2
| $(gdb) break line-or-function if expr $(gdb) break 46 if testsize==100
|
查看堆栈
1 2
| $(gdb) backtrace $(gdb) bt
|