【发布时间】:2009-11-27 19:48:46
【问题描述】:
我认为这可能已被较早提出,但我找不到满足我要求的。
我正在通过尝试分析各种测试套件中的代码流来调试(实际上是试图理解)一个大型项目。但是当我尝试在某些文件上设置断点时,我收到错误“找不到名为文件名的源文件”。
所以我的问题是:
- gdb 能否只接受代码流进入的源文件的断点?
- 我能否在文件的整行上设置断点,例如
b filename:* - 头文件的断点是否会被接受,因为头文件只是在编译时附加的?
任何见解都非常受欢迎。
编辑
我用一些 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