如何在 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 命令。

当然,您需要适当地设置目录列表。使用dircommand。

GDB documentation 以教程章节开头,请阅读。

当然,您的所有软件都应使用-g(甚至-g3)进行编译,以便从编译器中获取其调试信息。

顺便说一句,您的源文件已经被gdb 打开(即:可见)。您可能想要list 的一部分,或者在其中放置一个断点(使用breaktbreak)。您无需执行任何特定操作即可使其对gdb 可见(dir 命令可能除外)。

【讨论】:

“答案”没有回答用户的问题。

以上是关于如何在 GDB 中打开源文件的主要内容,如果未能解决你的问题,请参考以下文章

QGIS入门实战精品教程3.3:QGIS如何打开ArcGIS创建的文件数据库(GDB)?

QGIS入门实战精品教程005:QGIS如何打开ArcGIS创建的文件数据库(GDB)?

mdb如何转成ttl

如何在 gdb 中附加进程

如何让rgdal打开地理数据库(.gdb)文件?

arcgis如何将注记从mdb导出到gdb数据库?