xref: /llvm-project/lldb/test/API/commands/target/stop-hooks/stop_hook.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1import lldb
2
3
4class stop_handler:
5    def __init__(self, target, extra_args, dict):
6        self.extra_args = extra_args
7        self.target = target
8        self.counter = 0
9        ret_val = self.extra_args.GetValueForKey("return_false")
10        if ret_val:
11            self.ret_val = False
12        else:
13            self.ret_val = True
14
15    def handle_stop(self, exe_ctx, stream):
16        self.counter += 1
17        stream.Print("I have stopped %d times.\n" % (self.counter))
18        increment = 1
19        value = self.extra_args.GetValueForKey("increment")
20        if value:
21            increment = value.GetUnsignedIntegerValue()
22        else:
23            stream.Print("Could not find increment in extra_args\n")
24        frame = exe_ctx.GetFrame()
25        expression = "g_var += %d" % (increment)
26        expr_result = frame.EvaluateExpression(expression)
27        if not expr_result.GetError().Success():
28            stream.Print(
29                "Error running expression: %s" % (expr_result.GetError().GetCString())
30            )
31        value = exe_ctx.target.FindFirstGlobalVariable("g_var")
32        if not value.IsValid():
33            stream.Print("Didn't get a valid value for g_var.")
34        else:
35            int_val = value.GetValueAsUnsigned()
36        stream.Print("Returning value: %d from handle_stop.\n" % (self.ret_val))
37        return self.ret_val
38
39
40class bad_handle_stop:
41    def __init__(self, target, extra_args, dict):
42        print("I am okay")
43
44    def handle_stop(self):
45        print("I am bad")
46
47
48class no_handle_stop:
49    def __init__(self, target, extra_args, dict):
50        print("I am okay")
51