当我最初运行gdb时,似乎gdb无法识别任何给它的源文件(为了添加断点),除非程序首次运行干净,没有任何断点:
不起作用:
(gdb) break dir1/dir2/filename.cxx:1
No source file named break dir1/dir2/filename.cxx.
确实有效:
(gdb) run
etc, etc
...
[Thread 0x... (LWP 14348) exited]
[Thread 0x... (LWP 14347) exited]
[Thread 0x... (LWP 14335) exited]
[Inferior 1 (process 14335) exited normally]
(gdb) break dir1/dir2/filename.cxx:1
Breakpoint 1 at 0x...: dir1/dir2/filename.cxx, line 1.
我快速搜索了gdb错误列表:https://sourceware.org/bugzilla/
它似乎并不存在。 Stack Overflow似乎同样是空的。
首先,是否有任何迹象表明为什么会发生这种情况,(我怀疑程序本身可能是问题。或者源文件可能只是由gdb通过实际运行代码“发现”)
其次,有没有办法解决这个问题?
注意如果您想对这个问题进行投票,我将不胜感激,如果您能在评论中告知我您为何这样做。否则,我会一直无知。另外,请随时要求澄清
谢谢
答案 0 :(得分:0)
为了安装断点,gdb需要知道对应于所请求的源代码位置的可执行文件的偏移量。从符号表中检索此偏移量。当实际加载特定可执行文件(或dll)或请求gdb明确地确认它时(例如,使用file
命令),符号表变为可用。但是有可能preinstall
断点 - 告知gdb你想要一个断点,但是当所需的符号表可用时,它将在未来实际安装。在这种情况下,你应该看到这样的东西:
(gdb) break dir1/dir2/filename.cxx:1
No source file named break dir1/dir2/filename.cxx.
Make breakpoint pending on future shared library load? (y or [n])
如果您没有收到此消息,则可能已关闭待处理的断点。您可以通过执行
来检查gdb show breakpoint pending
如果已关闭,则可以使用
启用它gdb set breakpoint pending on (or auto)