我如何在unix中提到gdb以递归方式搜索单个目录中的源文件 例如 如果一个模块中有一些不同的建筑块。 a是b,c,d的父目录,其中b,c,d是子目录。 和源文件分布在b,c,b中。 我只需要向gdb提及所有源文件都位于(父目录)中。 哪个gdb将用作参考,并在调试程序时递归搜索源文件。
答案 0 :(得分:26)
您需要的是命令set substitute-path。
(gdb) set substitute-path /usr/src/include /mnt/include
仅适用于gdb的最新版本(6.6+)。
答案 1 :(得分:16)
或者您可以执行以下操作,以便在目录prog
中使用源调试程序srcdir
:
gdb `find srcdir -type d -printf '-d %p '` prog
我认为这是对你的问题更直接的回答。如果您的可执行文件不包含编译目录和/或您没有6.6+版本的gdb,也很有用。
答案 2 :(得分:5)
(gdb) help files
Specifying and examining files.
List of commands:
add-shared-symbol-files -- Load the symbols from shared objects in the dynamic linkers link map
add-symbol-file -- Load symbols from FILE
add-symbol-file-from-memory -- Load the symbols out of memory from a dynamically loaded object file
cd -- Set working directory to DIR for debugger and program being debugged
core-file -- Use FILE as core dump for examining memory and registers
directory -- Add directory DIR to beginning of search path for source files
edit -- Edit specified file or function
exec-file -- Use FILE as program for getting contents of pure memory
file -- Use FILE as program to be debugged
forward-search -- Search for regular expression (see regex(3)) from last line listed
generate-core-file -- Save a core file with the current state of the debugged process
(gdb) help directory
Add directory DIR to beginning of search path for source files.
Forget cached info on source file locations and line positions.
DIR can also be $cwd for the current working directory, or $cdir for the
directory in which the source file was compiled into object code.
With no argument, reset the search path to $cdir:$cwd, the default.
答案 3 :(得分:0)
对我来说目录命令效果很好。
我刚刚进入目标系统二进制文件,库和源文件所在的顶级目录(目标sysroot)。 GDB递归地找到了所有必要的内容。
查看一下,这是屏幕截图:
(gdb) list
705 /usr/src/debug/babeltrace/1.5.1-r0/git/converter/babeltrace.c: No such file or directory.
(gdb) directory /home/egradra/SDK_AXM5612/sysroots/armv7a-vfp-neon-wrs-linux-gnueabi
Source directories searched: /home/egradra/SDK_AXM5612/sysroots/armv7a-vfp-neon-wrs-linux-gnueabi:$cdir:$cwd
(gdb) list
705 goto end;
706 }
707 }
708 ret = 0;
709
710 end:
711 bt_ctf_iter_destroy(iter);
712 error_iter:
713 bt_iter_free_pos(begin_pos);
714 bt_iter_free_pos(end_pos);
(gdb)