Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do an specific action when a certain breakpoint is hit in GDB?

Tags:

c

gdb

I am looking for a way to do some action when a particular break point hits in gdb.

Basically I have some memleak in my program. When malloc and free function hits, I need to enter into the function (step) and collect some basic information like the addr and size (basically print there values). Once done resume my program.

Do we have any good way to do this?

like image 683
Thangaraj Avatar asked Jun 29 '11 07:06

Thangaraj


People also ask

What command is used in gdb to set a breakpoint?

Breakpoints are set with the break command (abbreviated b ). The debugger convenience variable `$bpnum' records the number of the breakpoint you've set most recently; see section Convenience variables, for a discussion of what you can do with convenience variables.

What does jump do in gdb?

jump * address. Resume execution at the instruction at address address . makes the next continue command or stepping command execute at address 0x485 , rather than at the address where your program stopped. See section Continuing and stepping.


1 Answers

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 

If the first command you specify in a command list is silent, the usual message about stopping at a breakpoint is not printed. This may be desirable for breakpoints that are to print a specific message and then continue. If none of the remaining commands print anything, you see no sign that the breakpoint was reached. silent is meaningful only at the beginning of a breakpoint command list.

One application for breakpoint commands is to compensate for one bug so you can test for another. Put a breakpoint just after the erroneous line of code, give it a condition to detect the case in which something erroneous has been done, and give it commands to assign correct values to any variables that need them. End with the continue command so that your program does not stop, and start with the silent command so that no output is produced. Here is an example:

break 403 commands silent set x = y + 4 cont end 
like image 178
Fredrik Pihl Avatar answered Oct 03 '22 19:10

Fredrik Pihl