【问题标题】:Using gdb, display multiple vars in one line?使用gdb,在一行中显示多个变量?
【发布时间】:2009-01-24 17:45:41
【问题描述】:

如何要求在一行中显示多个变量?所以我想得到如下输出:

30      if(s[i] != '\0')
5: s[i] = 101 'e'
4: exp = 14
3: val = 123.45
2: sign = 1
1: i = 6

我一直在输入 disp s[i] ENTER disp exp ENTER(等等),我只知道必须有更好的方法在一行输入中做到这一点。

【问题讨论】:

标签: debugging gdb


【解决方案1】:

要建立多个活动的“变量显示”,而无需在每次重新启动 GDB 时重新键入 display idisplay s[i] 等,请使用 GDB“固定命令序列”。

例如,将此添加到您的~/.gdbinit

define disp_vars
  disp i
  disp sign
  disp val
  disp exp
  disp s[i]
end

现在您可以通过在 GDB 提示符下键入 disp_vars 来一次添加所有显示。

【讨论】:

  • 谢谢,但是当我逐步完成时,显示会继续显示变量。每一步我都必须跳过 printf !
  • 忽略我上面的评论,因为您已将答案从简单的 printf 更改为解决方案。谢谢。我将您的答案标记为解决方案!
【解决方案2】:

Employed Russian 给出了正确的解决方案,但对于那些希望在示例中使用它的人来说,请参见下文。如果您不确定是否要承诺将 .gdbinit 放在您的主目录中,您也可以将其放在您执行程序的目录中以进行实验。

$ gcc -g atof_ex4.2.c 
$ gdb ./a.out
(gdb) b 30
Breakpoint 1 at 0x1907: file atof_ex4.2.c, line 30.
(gdb) h user-defined 
List of commands:
disp_vars -- User-defined
(gdb) disp_vars  #this will enable the user defined canned sequence (but I haven't done run yet! So I'll this actually doesn't work yet.)
No symbol "i" in current context.
(gdb) r
Starting program: a.out 
Breakpoint 1, atof (s=0xbffff028 "123.45e-6") at atof_ex4.2.c:30
30      if(s[i] != '\0')
(gdb) s # No disp_vars output yet because I have to do it AFTER 'run' command
32          if(s[i] == 'e' || s[i] == 'E') 
(gdb) disp_vars # Now it will work ;)
(gdb) s
35              sign = (s[i] == '-') ? -1 : 1;
5: s[i] = 45 '-'
4: exp = 14
3: val = 123.45
2: sign = 1
1: i = 7

当然,“r”代表运行,“s”代表步,“b”代表中断,等等。我也省略了一些输出。请注意,我必须在“运行”之后再次输入“disp_vars”命令。感谢雇用俄罗斯人。

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2011-08-20
    相关资源
    最近更新 更多