如何在 GDB 中打开源文件
Posted
技术标签:
【中文标题】如何在 GDB 中打开源文件【英文标题】:How to open a source file in GDB 【发布时间】:2015-02-25 16:18:27 【问题描述】:我使用 GDB 附加到正在运行的进程并捕获断点。我执行以下命令序列:
$ gdb -tui
(gdb) 附加 PID
现在我打开了 GUI TUI view,没有任何源文件。
我一直在拼命地尝试用谷歌搜索一种加载/打开源文件以能够执行命令“break”的方法,但不幸的是我找不到任何可以简单工作的方法。
【问题讨论】:
你是如何编译进程中运行的程序的?你用-g
了吗?您是否向gdb
发出了dir
命令?
@BasileStarynkevitch 是的,我用“-g”编译它,但我认为这与我的问题无关,因为当 main.cpp 为“自动”加载。然后我可以设置断点,通过其他文件进入代码等。我的问题是如果源文件没有打开,如何打开它。
您能否向我们展示您的 TUI 窗口的图像或bt
的输出?当您附加到一个进程时,当前函数很可能是一个系统调用接口,它是 C 库的一部分,在大多数 Linux 发行版中默认情况下不附带源代码。你需要做的就是去up
一两帧,直到你得到你自己的代码。
【参考方案1】:
我也有同样的问题;令人惊讶的是,这样一个基本功能如此晦涩难懂。我的解决方法是使用文件名和函数名来设置断点:
b <filename>:<function name>
【讨论】:
非常令人沮丧且非常棘手。我也想这样做,但是“b src/file.c:func”对我不起作用。 @RichieHH 你试过使用 Alt-O 的方法(上面)吗?【参考方案2】:我终于在 cgdb 中找到了如何做到这一点:
-
按 Esc 进入代码窗口。
按 Alt-O。
向下滚动到要打开的源文件,然后按 Enter。
现在你可以在这个文件中设置断点了。
【讨论】:
【参考方案3】:我发现在 gdb 中,list
知道符号,所以
l main()
将在它定义的任何文件中打开 main(我在这个例子中假设 C - 你没有指定语言)。
TAB
还完成函数名称(如在 linux 命令行上),
【讨论】:
【参考方案4】:阅读 GDB 文档的examine source file 章节。
您可以使用list
命令。
当然,您需要适当地设置目录列表。使用dir
command。
GDB documentation 以教程章节开头,请阅读。
当然,您的所有软件都应使用-g
(甚至-g3
)进行编译,以便从编译器中获取其调试信息。
顺便说一句,您的源文件已经被gdb
打开(即:可见)。您可能想要list
的一部分,或者在其中放置一个断点(使用break
或tbreak
)。您无需执行任何特定操作即可使其对gdb
可见(dir
命令可能除外)。
【讨论】:
“答案”没有回答用户的问题。以上是关于如何在 GDB 中打开源文件的主要内容,如果未能解决你的问题,请参考以下文章
QGIS入门实战精品教程3.3:QGIS如何打开ArcGIS创建的文件数据库(GDB)?