【问题标题】:breakpoints in GDBGDB 中的断点
【发布时间】:2009-11-27 19:48:46
【问题描述】:

我认为这可能已被较早提出,但我找不到满足我要求的。

我正在通过尝试分析各种测试套件中的代码流来调试(实际上是试图理解)一个大型项目。但是当我尝试在某些文件上设置断点时,我收到错误“找不到名为文件名的源文件”。
所以我的问题是:

  1. gdb 能否只接受代码流进入的源文件的断点?
  2. 我能否在文件的整行上设置断点,例如b filename:*
  3. 头文件的断点是否会被接受,因为头文件只是在编译时附加的?

任何见解都非常受欢迎。

编辑
我用一些 hello world 代码检查了这些问题,发现与其中一个答案中指出的结果相同。但我在实际项目中的问题仍然存在。即使我可以看到不被接受为断点的同一行的编辑输出,我仍然会遇到相同的错误。

编辑 2
我让它工作了,但不明白它是如何工作的以及为什么工作......??


(gdb) b /home/neeraj/BTP/trunk/include/header.h:872
No source file named /home/neeraj/BTP/trunk/include/header.h:872
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) b /home/neeraj/BTP/trunk/src/driver.cpp:2
Breakpoint 1 at 0x806c61a: file ../../../trunk/src/driver.cpp, line 2.
(gdb) b /home/neeraj/BTP/trunk/include/header.h:872
Breakpoint 2 at 0x8052fa0: file ../../../trunk/include/header.h:872, line 872.
(gdb)

任何更深入的见解..?

【问题讨论】:

  • 当心共享库。您可能想在加载任何共享库后尝试设置断点。对于最常见的情况:在 main 上设置断点,运行程序,然后(在 main 中)设置断点。
  • @Managu 感谢您的评论启发了我成功的试错工作..:P

标签: c++ gdb


【解决方案1】:
  1. 没有。
  2. 没有。
  3. 是的。

确保使用 -g(调试)选项进行编译。确保源路径设置正确。使用目录、显示目录和 dir 命令来查看/设置。

【讨论】:

    【解决方案2】:

    除了共享库之外要注意的另一件事是gdb 源文件名是相对于编译代码的目录的。如果没有使用绝对路径名编译,使用dir命令将编译目录添加到gdb搜索源代码的地方列表中。

    还有一个提示:当我使用Data Display Debugger (DDD) 图形前端到gdb 时,我发现我的工作效率大大提高。

    【讨论】:

    • 谢谢..这就像一个魅力..事实上整个行为是由于包含路径不在要搜索的路径中。
    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多