tests/c/py-framedecorator.py
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 18 Feb 2019 10:49:02 +0000
changeset 176 e734c17e7c37
parent 127 1254cc005f57
permissions -rw-r--r--
Use `View >> pushEvent:` or `ApplicationModel >> enqueueMessage:` to post events ...rather than asking for a window sensor and then talking to it. This allows for more flexibility as the object (subscription receiver) can decide how to handle posting of events.
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