首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在运行程序之前,gdb不会识别源文件。

在运行程序之前,gdb不会识别源文件。
EN

Stack Overflow用户
提问于 2017-04-18 03:37:07
回答 1查看 528关注 0票数 0

当我最初运行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“发现”)

第二,是否有办法解决这个问题?

备注如果你想否决这个问题,如果你能在评论中告诉我你为什么这么做的话,我将不胜感激。否则,我将继续无知。此外,请随时要求澄清。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-18 05:54:30

为了安装断点,gdb需要知道与请求的源代码位置对应的可执行文件的偏移量。此偏移量从符号表中检索。当实际加载特定的可执行文件(或dll)或请求gdb显式地确认它(例如,使用file命令)时,符号表就可用了。但是,preinstall断点是可能的--通知gdb您想要一个断点,但当需要的符号表可用时,它将在将来实际安装。在这种情况下,您应该会看到这样的情况:

代码语言:javascript
运行
复制
(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])

如果您没有收到此消息,则可能关闭了挂起的断点。您可以通过执行

代码语言:javascript
运行
复制
gdb show breakpoint pending

如果它是关闭的,那么您可以使用

代码语言:javascript
运行
复制
gdb set breakpoint pending on (or auto)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43463152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档