每次都让 GDB 打印上下文

Posted

技术标签:

【中文标题】每次都让 GDB 打印上下文【英文标题】:Make GDB print context around every time 【发布时间】:2013-04-05 19:59:22 【问题描述】:

LLDB 每次都在当前行周围打印上下文,如下所示:

     int a = 12;
     int b = a * 13;
->   printf("%d\n", b);
     return 0;
   

同时,GDB 只打印当前行:

->   printf("%d\n", b);

我可以像 LLDB 一样让 GDB 在每一步都打印上下文吗?谷歌搜索给出所有列表命令。

【问题讨论】:

【参考方案1】:

实现此目的的一种方法可能是定义一个重新定义关键字的宏,例如“s”或“n”。 例如,如果您想在每一步打印出堆栈指针的值,您可以通过将这些行输入 (gbd) 控制台来重新定义“s”:

def s
step
info registers sp
end

现在每次使用命令“s”时,实际上都会执行一步并打印 sp 寄存器

【讨论】:

但是没有花式-> 很遗憾。【参考方案2】:

没有内置的方法可以做到这一点。

你可以让它工作,有点,使用 hookpost-stop 来调用显式列表命令。

不过,我认为大多数人只是使用众多 gdb GUI 之一。

【讨论】:

你能给我一份这些优秀 GUI 的清单吗?埃马克斯? DDD? Netbeans/eclipse? 我偏爱 Emacs,但这里有一个相当完整的列表:sourceware.org/gdb/wiki/GDB%20Front%20Ends

以上是关于每次都让 GDB 打印上下文的主要内容,如果未能解决你的问题,请参考以下文章

调试利器GDB-下

使用 gdb 检查调用者帧

Linux里常见的gdb命令

跟踪所有变量以执行gdb中的函数

gdb:不在上下文中的结构的大小?

每次进入gdb时都打印出局部变量