介绍
GDB可以用在linux shell下debug程序
GDB简明教程:
https://zhuanlan.zhihu.com/p/21987947
https://www.jianshu.com/p/08de5cef2de9
编译程序
在编译的时候手动加上-g选项
启动GDB环境
进入GDB调试环境
查看源码
|
|
添加断点
|
|
运行程序
|
|
打印变量
|
|
打开图形化界面
|
|
查看调用栈
|
|
具体列子
调试C++程序,想看C++在什么时候读取的图片
直接在函数的位置打log
gdb加断点
写一个简单C函数打断点
extern “C” my_debug() {} //用C函数,编译后符号表里面函数名方便认识,方便用b 函数名打断点
mydebug() {print(__line)}
my_debug() ;
b my_debug
bt
gdb ./build/tools/caffe
set args time -model ./caffe_validation_models/TrueImageModels/lmdb/default_resnet_50/deploy.prototxt –forward_only –phase TEST –iterations 100 –engine=MKLDNN
- 编译的时候去掉选项 -O2 -O3
添加编译选项-g
查看文件中是否有O3
find . -name “Makefile” | xargs grep O3
查找所有makefile文件
xargs命令的作用就是把每个查找到的文件送入grep
打印变量出错
gdb
因为编译时的优化,在makefile里面把O2去掉或者改成O0
或者makefile里面定义一个OPTIMIZATION变量OPTIMIZATION?=-O0
make OPTIMIZATION=-O0
GUI工具
试了下gdbgui感觉还可以(https://www.gdbgui.com/)
启动之后会自动弹出来服务器的firefox(如果服务器有桌面,工具配置了X11),也可以关闭之后,像notebook一样在命令行配置
在本地chrome里面启动http://localhost:5000/
启动之后可以加载binary也可以attach process
右上角可以debug
右侧中边可以看到各个变量的值