9

How can I ask to display multiple vars in one line? So I want to get output like:

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

I've been typing in disp s[i] ENTER disp exp ENTER (etc, etc) and I just know there's got to be a better way to do this in one line of typing.

4
  • That's a really helpful title you've got there. Commented Jan 24, 2009 at 17:49
  • It's a good question but with a bad title... Commented Jan 24, 2009 at 18:20
  • 1
    You guys are right. Thanks for the edit. Commented Jan 24, 2009 at 19:56
  • Possible duplicate of gdb - print multiple variables with one command Commented Nov 23, 2015 at 12:25

2 Answers 2

11

To establish multiple active "variable displays" without re-typing each of display i, display s[i], etc. every time you restart GDB, use a GDB "canned command sequence".

For example, add this to your ~/.gdbinit:

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

Now you can add all the displays at once by typing disp_vars at the GDB prompt.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, but display continues to display vars as I step through. I'd have to cut n past the printf for each step through!
Disregard my comment above as you've changed the answer from a simple printf to the solution. Thanks. I'm marking your answer as a solution!
4

Employed Russian gave the correct solution but for those that want see it used in an example see below. If you're not sure if you want to commit to putting the .gdbinit in your home directory, you can also put it in the directory you're executing the program from to experiment.

$ 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

Of course 'r' is for run, 's' is for step, 'b' is for break, etc. I've also omitted some output. Notice that I had to enter the 'disp_vars' command again after 'run'. Thanks Employed Russian.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.