本文记录gdb学习过程以darknet yolov3 调试为例(learning…)
学习gdb代码调试的缘由
- 强大的代码调试功能,摈弃IDE开发环境
- darknet yolov3 训练过程中遇到训练图片路径中不能含有"images"字符目录的bug
gdb简介以及常用命令
命令列表转载
darknet yolov3调试
假设已经下载darknet yolov3,图片和标注好的数据已经放在darknet/images下,并配置好voc.data、yolov3-voc.cfg、voc.names等。修改darknet/Makefile文件debug 选项为1(编译时添加调试信息)
gdb darknet
(gdb) set args detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
(gdb) run
Couldn’t open file labels/1.txt
darknet目录下搜索Couldn’t open file
grep -rn "Couldn't open file"
src/utils.c:283: fprintf(stderr, "Couldn't open file: %s\n", s);
Binary file libdarknet.a matches
Binary file obj/utils.o matches
Binary file libdarknet.so matches
Binary file darknet matches
grep -rn "replace"
src/stb_image.h:121:// // ... replace '0' with '1'..'4' to force that many components per pixel
src/stb_image.h:5291: // if alpha channel is all 0s, replace with all 255s
src/stb_image.h:7312: fix search&replace from 1.36 that messed up comments/error messages
src/data.c:56:char **find_replace_paths(char **paths, int n, char *find, char *replace)
src/data.c:58: char **replace_paths = calloc(n, sizeof(char*));
src/data.c:61: char replaced[4096];
src/data.c:62: find_replace(paths[i], find, replace, replaced);
src/data.c:63: replace_paths[i] = copy_string(replaced);
src/data.c:65: return replace_paths;
src/data.c:219: find_replace(path, "images", "labels", labelpath);
src/data.c:220: find_replace(labelpath, "JPEGImages", "labels", labelpath);
src/data.c:221: find_replace(labelpath, ".jpg", ".txt", labelpath);
src/data.c:222: find_replace(labelpath, ".JPG", ".txt", labelpath);
src/data.c:223: find_replace(labelpath, ".JPEG", ".txt", labelpath);
- “images” 是一个特殊字符串,在图片路径中被"labels"替换