【发布时间】:2012-09-05 17:12:54
【问题描述】:
GDB 在 next/stop 之后没有向我显示行源,并且只显示行号和源文件,如下所示:
(gdb) n
7 in test/test.c
而我希望它显示当前行,像这样:
(gdb) next
17 char * good_message = "Hello, world.";
.gdbinit 中的任何设置可以帮助我做到这一点吗?
【问题讨论】:
标签: gdb
GDB 在 next/stop 之后没有向我显示行源,并且只显示行号和源文件,如下所示:
(gdb) n
7 in test/test.c
而我希望它显示当前行,像这样:
(gdb) next
17 char * good_message = "Hello, world.";
.gdbinit 中的任何设置可以帮助我做到这一点吗?
【问题讨论】:
标签: gdb
而我希望它显示当前行,像这样
在许多平台上,例如ELF,编译器会记录源代码的路径(在您的情况下为test/test.c)和编译目录,从而允许 GDB 显示源代码,无论您在哪个目录中调用它。
但是很多平台不够灵活,没有地方记录编译目录。在此类平台(例如 AIX)上,您必须在编译目录中启动 GDB,或者使用 directory 命令告诉它在哪里寻找源代码。
【讨论】:
dpkg-buildpackage) 构建 debian 包 exim4,它知道源代码编译目录的路径。但不知何故,编译目录不存在,我不得不进入源路径成功解析的目录(放置可执行文件的位置),以便它找到源代码。顺便说一句,到达断点后,我的gdb 说:“exim.c:没有这样的文件或目录。”不仅仅是“exim.c 中的 1415”
dpkg-buildpackage -T clean && dpkg-buildpackage -T build 代替 dpkg-buildpackage。因为在后一种情况下存在编译目录。
可能我的回答可能不是一个完美的解决方案,但编译源程序的方式很重要。例如,在我的情况下,如果您执行g++ fib.cpp -o fib 然后尝试运行gdb fib,它将不会打印带有list 的源代码。使用调试标志g++ -g fib.cpp -o fib 然后使用 gdb 运行解决了我的问题。
【讨论】: