xref: /llvm-project/lldb/test/API/python_api/debugger/TestDebuggerAPI.py (revision 754ab803b8dc659e3645d369d1b5d6d2f97be29e)
1"""
2Test Debugger APIs.
3"""
4
5import lldb
6
7from lldbsuite.test.decorators import *
8from lldbsuite.test.lldbtest import *
9from lldbsuite.test import lldbutil
10
11
12class DebuggerAPITestCase(TestBase):
13
14    mydir = TestBase.compute_mydir(__file__)
15    NO_DEBUG_INFO_TESTCASE = True
16
17    @add_test_categories(['pyapi'])
18    def test_debugger_api_boundary_condition(self):
19        """Exercise SBDebugger APIs with boundary conditions."""
20        self.dbg.HandleCommand(None)
21        self.dbg.SetDefaultArchitecture(None)
22        self.dbg.GetScriptingLanguage(None)
23        self.dbg.CreateTarget(None)
24        self.dbg.CreateTarget(None, None, None, True, lldb.SBError())
25        self.dbg.CreateTargetWithFileAndTargetTriple(None, None)
26        self.dbg.CreateTargetWithFileAndArch(None, None)
27        self.dbg.FindTargetWithFileAndArch(None, None)
28        self.dbg.SetInternalVariable(None, None, None)
29        self.dbg.GetInternalVariableValue(None, None)
30        # FIXME (filcab): We must first allow for the swig bindings to know if
31        # a Python callback is set. (Check python-typemaps.swig)
32        # self.dbg.SetLoggingCallback(None)
33        self.dbg.SetPrompt(None)
34        self.dbg.SetCurrentPlatform(None)
35        self.dbg.SetCurrentPlatformSDKRoot(None)
36
37        fresh_dbg = lldb.SBDebugger()
38        self.assertEquals(len(fresh_dbg), 0)
39
40    @add_test_categories(['pyapi'])
41    def test_debugger_delete_invalid_target(self):
42        """SBDebugger.DeleteTarget() should not crash LLDB given and invalid target."""
43        target = lldb.SBTarget()
44        self.assertFalse(target.IsValid())
45        self.dbg.DeleteTarget(target)
46
47    @add_test_categories(['pyapi'])
48    def test_debugger_internal_variables(self):
49        debugger_name = self.dbg.GetInstanceName()
50
51        # Set a variable and check it was written successfully.
52        error = lldb.SBDebugger.SetInternalVariable(
53            'target.prefer-dynamic-value', 'no-dynamic-values', debugger_name)
54        self.assertTrue(error.Success())
55        ret = lldb.SBDebugger.GetInternalVariableValue(
56            'target.prefer-dynamic-value', debugger_name)
57        self.assertEqual(ret.GetSize(), 1)
58        self.assertEqual(ret.GetStringAtIndex(0), 'no-dynamic-values')
59
60        # Set a variable with a different value.
61        error = lldb.SBDebugger.SetInternalVariable(
62            'target.prefer-dynamic-value', 'no-run-target', debugger_name)
63        self.assertTrue(error.Success())
64        ret = lldb.SBDebugger.GetInternalVariableValue(
65            'target.prefer-dynamic-value', debugger_name)
66        self.assertEqual(ret.GetSize(), 1)
67        self.assertEqual(ret.GetStringAtIndex(0), 'no-run-target')
68
69        # Try setting invalid value, check for error.
70        error = lldb.SBDebugger.SetInternalVariable(
71            'target.prefer-dynamic-value', 'dummy-value', debugger_name)
72        self.assertTrue(error.Fail())
73        # Check that the value didn't change.
74        ret = lldb.SBDebugger.GetInternalVariableValue(
75            'target.prefer-dynamic-value', debugger_name)
76        self.assertEqual(ret.GetSize(), 1)
77        self.assertEqual(ret.GetStringAtIndex(0), 'no-run-target')
78