since my smoketest failed again today, i've distracted myself a bit with
GDB Python scripting, the result of which is a command that can break
when an exception is thrown, but only if a certain function (which is
given as parameter) is on the stack.
seems to work, but it is quite slow: finding the smoketest exception in
SfxBaseModel::getTitle takes GDB 4 minutes of CPU time.
now probably somebody will tell me that i'm too stupid to RTFM and there
is a much simpler way to do this :)
regards,
michael
import gdb
class FunCatchpoint (gdb.Breakpoint):
#__init__ spec [type] [wp_class] [internal]
def __init__(self, arg):
super (FunCatchpoint, self).__init__("__cxa_throw")
self.active = arg
def stop (self):
# print "stop called for: " + self.active
frame = gdb.newest_frame()
while frame:
# print frame.name()
if frame.name() == self.active:
return True
frame = frame.older()
return False
class FunCatch(gdb.Command):
"""catch exceptions (but only when inside the given function)
example: fcatch SfxBaseModel::getTitle"""
def __init__ (self):
super (FunCatch, self).__init__ (
"fcatch", gdb.COMMAND_BREAKPOINTS)
#not a good idea: need names, not symbols, gdb.COMPLETE_SYMBOL)
def invoke (self, arg, from_tty):
FunCatchpoint(arg)
FunCatch()
Context
- [Libreoffice] gdb: catching exceptions... · Michael Stahl
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.