使用gdb,在一行中显示多个变量?

时间:2009-01-24 17:45:41

标签: debugging gdb

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

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

我一直在键入disp [i] ENTER disp exp ENTER(等等),我只知道在一行打字中必须有更好的方法。

2 个答案:

答案 0 :(得分:9)

要在每次重新启动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来一次添加所有显示。

答案 1 :(得分:4)

受雇的俄罗斯人给出了正确的解决方案,但对于那些希望看到它在示例中使用的人,请参见下文。如果您不确定是否要将.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'用于休息等。我也省略了一些输出。请注意,我必须在'run'之后再次输入'disp_vars'命令。谢谢雇用俄语。