-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommands.py
91 lines (71 loc) · 2.58 KB
/
commands.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import gdb
class PrintCommand(gdb.Command):
def __init__(self):
super().__init__("lisp-print", gdb.COMMAND_DATA)
def invoke(self, argument, from_tty):
args = argument.split(" ")
if len(args) == 1:
self.print_lisp(args[0])
elif len(args) == 2 and args[0] == "internal":
self.print_c(args[1])
else:
print("invalid usage: lisp-print (<var-name> | internal <var-name>)")
def print_lisp(self, name):
val = VariableLookup.get_val(name)
if val is None:
print(f"object {name} does not exist")
else:
print(val)
def print_c(self, name):
try:
obj = LispObject.from_var(name)
print(obj)
except ValueError:
print(f"variable {name} does not exist")
class BreakCommand(gdb.Command):
def __init__(self, manager):
super().__init__("lisp-break", gdb.COMMAND_BREAKPOINTS)
self.manager = manager
def invoke(self, argument, from_tty):
if argument:
self.manager.breakpoint(argument)
else:
print("must give the name of a function!")
class BacktraceCommand(gdb.Command):
def __init__(self, manager):
super().__init__("lisp-backtrace", gdb.COMMAND_STACK)
self.manager = manager
self.filter = LispFrameFilter(enabled=False)
def invoke(self, argument, from_tty):
if argument == "current":
print(self.manager.frame_list(backtrace=True))
elif argument:
print("invalid argument: [current]")
else:
self.filter.enabled = True
gdb.execute("backtrace")
self.filter.enabled = False
class StepCommand(gdb.Command):
def __init__(self, manager):
super().__init__("lisp-step", gdb.COMMAND_RUNNING)
self.manager = manager
def invoke(self, argument, from_tty):
self.manager.step()
class NextCommand(gdb.Command):
def __init__(self, manager):
super().__init__("lisp-next", gdb.COMMAND_RUNNING)
self.manager = manager
def invoke(self, argument, from_tty):
self.manager.next()
class UpCommand(gdb.Command):
def __init__(self, manager):
super().__init__("lisp-up", gdb.COMMAND_RUNNING)
self.manager = manager
def invoke(self, argument, from_tty):
self.manager.up()
class ContinueCommand(gdb.Command):
def __init__(self, manager):
super().__init__("lisp-continue", gdb.COMMAND_RUNNING)
self.manager = manager
def invoke(self, argument, from_tty):
self.manager.cont()