如何用gdb调试caffe

来源:互联网 发布:淘宝网可以卖中药吗 编辑:程序博客网 时间:2024/04/25 06:25

基础知识:当我们进入gdb的时候,可能需要的指令主要有:

1、程序运行参数。set args 可指定运行时参数。(如:set args 10 20 30 40 50show args 命令可以查看设置好的运行参数。2、运行环境。path <dir> 可设定程序的运行路径。show paths 查看程序的运行路径。set environment varname [=value] 设置环境变量。如:set env USER=hchen show environment [varname] 查看环境变量。3、工作目录。cd <dir> 相当于shell的cd命令。pwd 显示当前的所在目录。4、程序的输入输出。info terminal 显示你程序用到的终端的模式。使用重定向控制程序输出。如:run > outfile tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb

调试的指令很简单:
cd $CAFFE_ROOT,
1. gdb ./build/tools/caffe
2. 设置运行参数 set args train --solver=xxxxsolver.prototxt
3. 设置断点, 比如b solver.cpp:59 , 此时会出现“Make breakpoint pending on future shared library load? (y or [n]) ”, 选择y即可,因为断点设置在.so文件中
4. run 即可


gdb的调试信息中并不包含源码,只是包含了怎样去寻找源码,但是有的时候因为某种原因,比如你的源码转移了位置或者别的原因。你需要告诉gdb到哪里去寻找源码,可以使用dir指令:可参考

要查看当前gdb寻找源码的路径:show dir添加一个新的路径到查找路径:dir  dirname

添加源代码搜索路径的时候,如果路径很长,那么dir 绝对路径很麻烦,那怎么办?
一个很自然的想法就是利用环境变量:1. 利用gdb里定义的变量很简单;2.利用shell中已有的环境变量,需要使用gdb的shell指令,同时我们可以自定义gdb脚本(利用define语法),具体做法如下:
在$HOME下定义一个.gdbinit文件,输入代码:

define load_caffe_src_path    shell echo "dir $CAFFE_ROOT/src/caffe" > /tmp/tmp.caffesrcpath    source /tmp/tmp.caffesrcpath    shell rm /tmp/tmp.caffesrcpathend

如此,每当我江宁如gdb的时候,只有运行一下自定义命令load_caffe_src_path,即可自动完成源代码查找路径的添加。

1 1
原创粉丝点击