tests/c/py-framedecorator.py
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 07 Feb 2019 15:18:41 +0000
changeset 175 a04e1a36e888
parent 127 1254cc005f57
permissions -rw-r--r--
Fix for multi-location breakpoints created initially as pending If the breakpoint has been created as pending breakpoint it is unknown whether it is a multi-location breakpoint or not so it has no locations. If, once the object is loaded abd breakpoint can be installed, it turns out there are multiple locations, we get an an =breakpoint-modified event listing all locations. Therefore, we have to update existing breakpoint and add locations.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
127
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
import gdb
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
from itertools import chain
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
from gdb.FrameDecorator import FrameDecorator, SymValueWrapper
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
class FrameDecoratorWithSyntheticArgs(FrameDecorator):
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
    def __init__(self, fobj):
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
        super(FrameDecoratorWithSyntheticArgs, self).__init__(fobj)
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
        self.fobj = fobj
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
    def frame_args (self):
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
        r_args = super(FrameDecoratorWithSyntheticArgs, self).frame_args()
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
        s_args = [
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
            SymValueWrapper("syntheticArg0",gdb.Value(12)),
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
            SymValueWrapper("syntheticArg1","Stuff"),
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
            SymValueWrapper("syntheticArg2",42)
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
        ]
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
        return chain(s_args, r_args)
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    def frame_locals (self):
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
        r_locals = super(FrameDecoratorWithSyntheticArgs, self).frame_locals()
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
        s_locals = [
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
            SymValueWrapper("syntheticLocal0",gdb.Value(12)),
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
            SymValueWrapper("syntheticLocal1","Stuff"),
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
            SymValueWrapper("syntheticLocal2",42)
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
        ]
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
        return chain(s_locals, r_locals)
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
class FrameFilterWithSyntheticArgs ():
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    def __init__ (self):
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
        self.name = "SyntaticArgs"
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
        self.priority = 100
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
        self.enabled = True
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
        gdb.frame_filters [self.name] = self
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    def filter(self, frames):
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
        return map(lambda f : FrameDecoratorWithSyntheticArgs(f), frames)
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
FrameFilterWithSyntheticArgs()
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
1254cc005f57 Added support for 'synthetic' frame variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41