Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index



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


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.