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++、计算机等知识,欢迎访问我的个人博客进行交流, 点这里~~