天天看点

gdb使用快速手册 (Linux debug 神器)

使用gdb调试的必要性

说实话,我平时都是用CLion编辑和调试代码的,但是CLion超级占内存的,程序还没跑内存一半先没了。。所以,用轻便的工具调试程序就变得超级必要——那就是gdb,可以打断点、单步调试、中途输出变量、回溯错误等,而且几乎不占什么内存。

假装我有个程序

这里我假设写了个图片处理程序(假设是 src/test.cpp),然后用CMakeList.txt配置并且把这个程序编译为目标 test_program,本来运行该程序所用的命令是:

./test_program img.png

调试开始

使用gdb之前先在CMakeList.txt加一句

set (CMAKE_BUILD_TYPE debug)

然后在命令行启用gdb开始调试

$ gdb ./test_program

用b打断点:

(gdb) b src/test.cpp:39

这句话是在 src/test.cpp的第39行打了个断点

为了讲解方便,我们假装39行开始是:

for(int i=0;i<AA.size();i++){
    k=func(i);
}
           

用run开始运行该程序:直接在run后面接要用的参数就好:

(gdb) run img.png

这就相当于 ./test_program img.png 的调试模式了

然后程序会运行到39行暂停住,你此时可以用p输出想看的变量:

(gdb) p AA.size()

然后用c继续运行到下一次断点(由于这是个循环,它等下还是停在39行):

(gdb) c

Continuing.

用n执行下一行:

(gdb) n

用s可进入函数单步执行:

(gdb) s

(s是step缩写,其单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的)

如果想停止程序运行则按ctrl+c

然后用q可以退出调试:

(gdb) q

继续阅读