在Visual Studio中,如果单击调用堆栈中的条目,则会打开编辑器并显示该函数的源代码。 gdb中有类似的东西吗?我在gdb中使用tui(文本用户界面)。是否可以在回溯中为特定条目制作tui show源代码?
如果没有,那么如何利用回溯中的信息呢?您是否手动打开文件并导航到正确的行?
答案 0 :(得分:5)
当您在断点处使用gdb
(在任何模式下)停止并且可以使用backtrace
或where
命令查看回溯时,请使用up
和down
命令专注于回溯的不同功能(帧)。
您可以使用up 2
上两帧。 list
命令将显示当前帧周围的源行。
我认为,tui会在up
/ down
命令之后更改当前显示的函数/寄存器;在tui中没有点击式回溯(tui中是否有鼠标支持?)。只记录了tui的窗口
https://sourceware.org/gdb/onlinedocs/gdb/TUI-Commands.html
源,汇编和命令窗口。
有些键可以在TUI中更改当前帧,但不能在正常的TUI模式(https://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html)中更改,因此您可以使用gdb的文本命令。
还有“TUI单键模式”,由Ctrl-x s
激活,此模式中有向上/向下命令:u
/ d
和w
到得到回溯。该模式记录在https://sourceware.org/gdb/onlinedocs/gdb/TUI-Single-Key-Mode.html#TUI-Single-Key-Mode:
25.3 TUI单键模式
w where u up d down r run s step n next c continue f finish q exit the SingleKey mode. v info locals
其他键暂时切换到gdb命令提示符。按下的键被插入到编辑缓冲区中,因此可以在不与TUI SingleKey模式交互的情况下键入大多数gdb命令。输入命令后,将恢复TUI SingleKey模式。永久离开此模式的唯一方法是输入
q
或C-x s
。
您也可以尝试使用GUI(gnu ddd
或KDbg)的调试器,或大多数Linux IDE(list,wiki list中内置的任何其他gdb包装器:Eclipse, Netbeans,CLion,KDevelop,Code :: Blocks,CodeLite,...)。它们都更现代,更便于调试。
答案 1 :(得分:3)
要添加到osgx的答案中,您还可以使用例如frame 7
转到backtrace
标记为#7的框架,而不只是使用up
/ down
。