Hi Tom,
Tom Tromey píše v Pá 22. 02. 2013 v 11:14 -0700:
Michael> Even better than this would (perhaps) be a "break inside thrower that
Michael> is caught here" type breakpoint - that we could invoke to land us in
Michael> whatever code is going to throw as it does that [ and before it started
Michael> all the magic cleanup / unwinding work ]. That is - assuming that it's
Michael> possible for the code to know (at that point) where it will ultimately
Michael> end up (? ;-)
I think it isn't possible in general. When an exception is thrown, I
think all that can really be determined is the next catch point.
What this means is that if you have a series of throws and re-throws,
winding up at some "catch", then the best you could do is stop at the
re-throw that leads to that catch.
Even if this is not solving everything / the general case, I think this
would still be pretty useful for LibreOffice - I don't remember being
bitten by rethrows when debugging LO problems. And always one could set
this thing [how to call it, actually? ;-)] where the re-throw happens,
and try again - still it would save quite some time compared to first
setting a breakpoint to get to the relevant piece of code + catch throw
+ catch catch + hope that they are the right ones.
Here, suppose the comment marks the catch you are concerned with.
You want to find the throw that leads to this point.
The original throw in "doit" can only see as far as the catchpoint in
"dd2". That is because arbitrary code can be run there -- for example
it may swallow the exception and no more throwing is even done.
So this hypothetical breakpoint would only trigger at the re-throw in
dd2.
In other words - I'd love if gdb were able to do this even with the
re-throw limitation :-)
All the best,
Kendy
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.