c++ - Emacs 和 gdb - 在回溯中显示函数代码

标签 c++ debugging visual-studio-2012 emacs gdb

我正在调试 C++ 程序。假设我正坐在 gdb 的断点处,我执行 bt 50。这将生成回溯并向我显示调用堆栈,其中包含在执行过程中运行的 50 个函数到达现在的位置。

有时,我想快速检查回溯调用堆栈中某个函数的代码。我知道如何在 Visual Studio 上执行此操作。 Visual Studio 维护类似于 gdb backtrace调用堆栈。在 Visual Studio 上,我只需双击调用堆栈中的一个函数,Visual Studio 就会将我带到该函数的代码,如果文件没有打开,它甚至会为我打开文件。非常方便。

我想知道是否有一个 gdb 命令可以在回溯中显示围绕符号名称的代码。目前,我知道的唯一方法是手动查找文件并在 emacs 中打开它,然后在 emacs 中进行搜索以将我带到该功能。请告诉我是否有更好的方法,以便像在 Visual Studio 中一样方便。

最佳答案

有多种选择,具体取决于您运行 gdb 的方式。

一种简单的方法是在 emacs 中运行 gdb。您可以使用 M-x gdb(或 M-x gud-gdb,后者有点老派)来执行此操作。在 emacs 中运行 gdb 时,简单地选择一个框架将导致在 emacs 中访问源,并且点将移动到有问题的行。 “选择一个框架”可以通过 updownframe 命令完成。

如果您在 emacs 之外运行 gdb,并且想继续这样做,那么还有其他选择。

一种方法是使用 edit 命令。确保将您的 EDITOR 环境变量设置为使用 emacsclient 并设置 emacs 对此做出响应(如 M-x server-start)。

然后在 gdb 中,选择一些框架,您可以使用 edit *$pc 查看该框架的源代码。

有些人喜欢的另一种方法是使用 gdb“tui”。这是一个基于 curses 的界面,在终端中显示源代码。

另一种方法是使用众多 gdb GUI 之一。

关于c++ - Emacs 和 gdb - 在回溯中显示函数代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590698/

相关文章:

c++ - 使用 map 查找具有给定总和(带负数)的子数组

c++ - 编译/使用谷歌测试

javascript - 如何在后端检测前端 Action ?

c++ - 如何查找程序崩溃的位置

更改指针时 C++ 指针中断

c++ - 如何停止对辅助隐式加载 DLL 的 DLL 劫持

Python:来自 ipdb 的 Sublime Text 2 上的行突出显示

visual-studio-2012 - SkyDrive 和 Visual Studio 2012 同步问题

visual-studio-2012 - 使用发布到 AWS 进行 Web.config 转换

.net - F# 3.1 是否需要安装特定的运行时?