我正在调试一个C ++程序。假设我坐在gdb的断点处,我做bt 50
。这将生成回溯并向我展示具有50个函数的调用堆栈,这些函数在执行过程中运行到达现在的位置。
有时候,我想快速检查一下回溯调用堆栈中的一个函数的代码。我知道如何在Visual Studio上执行此操作。 Visual Studio维护call stack
类似于gdb backtrace
。在Visual Studio上,我可以简单地双击调用堆栈中的函数,Visual Studio将我带到该函数的代码,即使没有打开也会为我打开文件。非常方便。
我想知道是否有一个gdb命令在backtrace中显示符号名称周围的代码。目前,我知道的唯一方法是手动查找文件并在emacs中打开它,然后在emacs中搜索以转到该功能。请告诉我是否有更好的方法,以便在Visual Studio中变得方便。
答案 0 :(得分:1)
有多种选择,具体取决于您运行gdb的方式。
一种简单的方法是在emacs中运行gdb。您可以使用M-x gdb
(或M-x gud-gdb
,这是一个更老的学校)来做到这一点。在emacs中运行gdb时,只需选择一个框架就会导致在emacs中访问该源,并且point将移动到相关的行。 "选择框架"可以通过up
,down
和frame
命令完成。
如果您在emacs之外运行gdb,并希望继续这样做,那么仍有选项。
一种方法是edit
命令。请务必将EDITOR
环境变量设置为使用emacsclient
并设置emacs以响应此情况(例如M-x server-start
)。
然后在gdb中选择一些框架,您可以使用edit *$pc
看到该框架的来源。
有些人喜欢的另一种方法是使用gdb" tui"。这是一个基于curses的界面,显示终端中的源。
另一种方法是使用众多gdb GUI之一。