我正在调试一个C++程序。假设我坐在gdb中的一个断点上,并执行bt 50
。这将生成回溯跟踪,并向我展示具有50个函数的调用堆栈,这些函数在执行过程中运行,达到现在的水平。
有时,我希望快速检查回跟踪调用堆栈中的一个函数的代码。我知道如何在上这样做。Visual维护的call stack
类似于gdb backtrace
。在Visual上,我只需双击调用堆栈中的一个函数,Visual就会带我找到该函数的代码,如果没有打开,甚至可以为我打开该文件。非常方便。
我想知道是否有一个gdb命令来显示回溯中的符号名周围的代码。目前,我所知道的唯一方法是手动查找文件并在emacs中打开它,然后在emacs中进行搜索,将我带到函数中。如果有更好的方法,请告诉我,这样就可以像Visual那样方便了。
发布于 2016-06-02 06:56:04
有几种选择,取决于您如何运行gdb。
一个简单的方法是在emacs中运行gdb。您可以使用M-x gdb
(或者M-x gud-gdb
,这有点老派)来做这件事。在emacs中运行gdb时,只需选择一个框架就可以在emacs中访问源,并且点将移到有问题的行。“选择一个框架”可以通过up
、down
和frame
命令来完成。
如果您在emacs之外运行gdb,并且希望继续这样做,那么仍然有一些选项。
一种方法是edit
命令。确保将EDITOR
环境变量设置为使用emacsclient
,并设置emacs以响应此操作(如M-x server-start
)。
然后,在gdb中,选择一些框架,您可以使用edit *$pc
看到该框架的源代码。
一些人喜欢的另一种方法是使用gdb "tui“。这是一个基于诅咒的界面,显示终端中的源。
还有一种方法是使用许多gdb之一。
https://stackoverflow.com/questions/37590698
复制相似问题