当我最初运行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/
而且它似乎并不在那里。堆栈溢出似乎也是空的。
首先,是否有任何迹象表明为什么会发生这种情况(我怀疑程序本身就是问题所在。或者,源文件只有通过实际运行代码才能被gdb“发现”)
第二,是否有办法解决这个问题?
备注如果你想否决这个问题,如果你能在评论中告诉我你为什么这么做的话,我将不胜感激。否则,我将继续无知。此外,请随时要求澄清。
谢谢
发布于 2017-04-18 05:54:30
为了安装断点,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)
https://stackoverflow.com/questions/43463152
复制相似问题