以darknet源代码为例介绍C/C++项目makefile下的gdb调试过程

darknet源代码是makefile管理的,之前不会在Linux调试大型项目,今天探索了一下,这里介绍一下。

准备工作

这里下载源代码

修改makefile文件中DEBUG=0改为DEBUG=1进行调试。其中编译选项-O0,意思是不进行编译优化,gdb在默认情况下会使用-O2,会出现print变量中出现<optimized out>

接着编译源代码:

make clean
make

根目录会出现darknet可执行文件。

在工程根目录运行如下命令下载权重:

wget https://pjreddie.com/media/files/yolov3-tiny.weights

开始调试

终端输入如下语句,开始调试

gdb ./darknet

gdb命令中输入运行程序需要的参数类型

set args detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

为了对整个工程进行调试,这里需要将src目录添加进来,在gdb命令中输入如下指令:

DIR ./src

gdb命令中为main函数设置断点

b main

开始调试,在gdb命令中输入r,回车,发现程序停留在第一行。

接着可以在第435行,即char *outfile = find_char_arg(argc, argv, "-out", 0);,打上断点,在gdb命令中输入c,回车,程序跳到下一个断点,即停留在该行。输入s命令单步执行并跳入此处调用的子函数。输入print 变量名即可查看该变量值。输入finish跳出子函数。输入n单步执行,不跳入子函数。输入q结束调试。


One more thing

更多关于人工智能、Python、C++、计算机等知识,欢迎访问我的个人博客进行交流, 点这里~~

猜你喜欢

转载自blog.csdn.net/zdaiot/article/details/82976155