GDB中的断点

时间:2009-11-27 19:48:46

标签: c++ gdb

我认为这可能早先被问过,但我找不到满足我要求的那个。

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

  1. gdb是否只接受代码流进入的源文件的断点。?
  2. 我可以使用类似b filename:*
  3. 的内容在整个文件行上设置断点
  4. 是否接受头文件中的断点,因为头文件只是在编译时附加?
  5. 任何见解都非常受欢迎。

    修改
    我用一些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)
    

    任何更深入的见解......?

2 个答案:

答案 0 :(得分:8)

  1. 没有
  2. 没有
  3. 确保使用-g(调试)选项进行编译。确保正确设置了源路径。使用directory,show directories和dir命令来查看/设置。

答案 1 :(得分:6)

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

并提示:当我使用Data Display Debugger (DDD)图形前端gdb时,我发现自己的效率大大提高。