【问题标题】:gdb not showing the line sourcegdb 不显示行源
【发布时间】: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


【解决方案1】:

而我希望它显示当前行,像这样

在许多平台上,例如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。因为在后一种情况下存在编译目录。
【解决方案2】:

可能我的回答可能不是一个完美的解决方案,但编译源程序的方式很重要。例如,在我的情况下,如果您执行g++ fib.cpp -o fib 然后尝试运行gdb fib,它将不会打印带有list 的源代码。使用调试标志g++ -g fib.cpp -o fib 然后使用 gdb 运行解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多