Bug 12958 - How to set a breakpoint at the exit of a function?
Summary: How to set a breakpoint at the exit of a function?
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: breakpoints (show other bugs)
Version: 7.2
: P2 enhancement
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-07-04 09:20 UTC by 伍成平
Modified: 2011-07-18 16:24 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description 伍成平 2011-07-04 09:20:48 UTC
I know how to set a breakpoint at the begin of a function.it is "break function_name",but how to set a breakpoint at the exit/end of a function?
Comment 1 Yao Qi 2011-07-06 01:33:03 UTC
(In reply to comment #0)
> I know how to set a breakpoint at the begin of a function.it is "break
> function_name",but how to set a breakpoint at the exit/end of a function?

you can dissembly the function in gdb, and get the address of exit/end of a function, then you can set breakpoint on that address, for example, "b *0x123456".
Comment 2 伍成平 2011-07-06 03:08:21 UTC
(In reply to comment #0)
> I know how to set a breakpoint at the begin of a function.it is "break
> function_name",but how to set a breakpoint at the exit/end of a function?


test
Comment 3 伍成平 2011-07-06 03:44:40 UTC
(In reply to comment #1)
> (In reply to comment #0)
> > I know how to set a breakpoint at the begin of a function.it is "break
> > function_name",but how to set a breakpoint at the exit/end of a function?
> you can dissembly the function in gdb, and get the address of exit/end of a
> function, then you can set breakpoint on that address, for example, "b
> *0x123456".

yes,I can set a breakpoint at the exit of a function in this way,but it can only be used once, because when I modified my code,the exit address of the function will also change,so I must modify "the gdb command file" synchronously.I use the gdb command in this way "gdb -p $(pidof vmserver) -x cmd.txt",and the gdb command lies in the file(cmd.txt).the file content is:
    b CDeviceMgr::queryPhyDevsInDomain
    command
    silent
    p pcUserCode
    c
    end

    c
In this way,I can watch the input parameters of the function,but how to watch the output parameters?
I hope that I can set the exit breakpoint as simple as the entrance breakpoint.The most important thing is that I hope,when I modified my code,the gdb command file will be no need to modify synchronously.
Comment 4 Jan Kratochvil 2011-07-07 09:30:18 UTC
set record insn-number-max 10000000
record
finish
reverse-step
record stop

But that works only for functions not executing too long.
GDB currently does not have the feature to find all the function exit points, I guess it would need some GCC debug info marking extension first.
Comment 5 Tom Tromey 2011-07-18 16:24:45 UTC
There is a patch pending (maybe in assignment limbo) to add this feature.
I think it can also be done from python, perhaps with some difficulty.
On the gcc side: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49167