Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get GDB not to print function parameter values when "stepping into"?

Tags:

debugging

gdb

When hitting breakpoints and stepping into functions, gdb version 6.8 prints the name of the function followed by the function arguments.

It just so happens, in the program I'm debugging, one of the parameter values is a HUGE record being passed by reference. gdb prints the variable name followed by ALL of its member variables. It literally takes gdb a minute or two to print all the member variables contained in the class... which is really annoying when debugging.

I'm pretty sure there is a setting to disable this behavior, what is that setting?

like image 372
paxos1977 Avatar asked Apr 08 '09 17:04

paxos1977


2 Answers

Found it, finally. To disable the output completely:

set print frame-arguments none 

To print only scalar values and ignore arrays & structs:

set print frame-arguments scalars 

To turn the printing back on:

set print frame-arguments all
like image 138
paxos1977 Avatar answered Sep 22 '22 14:09

paxos1977


I have a way that I've always done this, but seeing your question made me curious to see if there is a better mechanism. I didn't find anything.

You can always set a breakpoint inside the function you're stepping into, but BEFORE you do the step, use the 'commands' command to tell gdb that you don't want it to print anything at all when it hits that breakpoint. An example will make things clearer...

You'll notice that when I run the program, I stop at the breakpoint on line 10 (the call to foo) and it prints my current context. After issuing the 'commands 2' command and telling gdb to be silent on that breakpoint, nothing is printed at all when I hit it. I did the backtrace (bt) just to show that I was where I wanted to be.

Hope this helps:

> cat tmp.cpp

#include <stdio.h>

void foo(int a)
{
        printf ("%d\n", a);
}

int main()
{
        foo(0);

        return 0;
}

> g++ -g tmp.cpp
> gdb a.out
GNU gdb Fedora (6.8-27.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
(gdb) break 10
Breakpoint 1 at 0x8048491: file tmp.cpp, line 10.
(gdb) break 5
Breakpoint 2 at 0x804846a: file tmp.cpp, line 5.
(gdb) run
Starting program: /home/ronb/software/a.out

Breakpoint 1, main () at tmp.cpp:10
10              foo(0);
(gdb) commands 2
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
>silent
>end
(gdb) c
Continuing.
(gdb) bt
#0  foo (a=0) at tmp.cpp:5
#1  0x0804849d in main () at tmp.cpp:10
(gdb)
like image 20
Sniggerfardimungus Avatar answered Sep 20 '22 14:09

Sniggerfardimungus