gdb: logging something instead of breaking?

2020-07-13 07:30发布

问题:

Is it possible to have gdb log something to the terminal instead of breaking on it? For example I would like to set a 'breakpoint' on some method and have gdb print self as well as the parameters each time the method is invoked. Basically I want to insert print statements into arbitrary places without actually recompiling.

thanks for any suggestions


This is what i have so far after these helpful comments:

define logFoo
b fooMethod
commands
po self
end
end

GDB doesn't seem to like the nested end statements though. any thoughts?

回答1:

You can use Breakpoint Command Lists. There is an example how to do it.

For example, here is how you could use breakpoint commands to print the value of x at entry to foo whenever x is positive.

 break foo if x>0
 commands
 silent
 printf "x is %d\n",x
 cont
 end


回答2:

Use a breakpoint as usual, and set a macro to log and continue:

 define c
 print "foo"
 cont
 c
 end


回答3:

No, this is not possible. You can only hook into the symbols of the code and machine code. If you want to log output you will need a logging functionality.

If you are tracing specific errors try conditional breakpoints and watch variables.

EDIT:

Even while not directly loggin it could be an alternative to use GDB command files



标签: unix logging gdb