xref: /llvm-project/lldb/test/API/commands/disassemble/basic/TestFrameDisassemble.py (revision 80fcecb13c388ff087a27a4b0e7ca3dd8c98eaa4)
1"""
2Test to ensure SBFrame::Disassemble produces SOME output
3"""
4
5
6import lldb
7import lldbsuite.test.lldbutil as lldbutil
8from lldbsuite.test.lldbtest import *
9
10
11class FrameDisassembleTestCase(TestBase):
12    NO_DEBUG_INFO_TESTCASE = True
13
14    def test_frame_disassemble(self):
15        """Sample test to ensure SBFrame::Disassemble produces SOME output."""
16        self.build()
17        self.frame_disassemble_test()
18
19    def frame_disassemble_test(self):
20        """Sample test to ensure SBFrame::Disassemble produces SOME output"""
21        # Create a target by the debugger.
22        target = self.createTestTarget()
23
24        # Now create a breakpoint in main.c at the source matching
25        # "Set a breakpoint here"
26        breakpoint = target.BreakpointCreateBySourceRegex(
27            "Set a breakpoint here", lldb.SBFileSpec("main.cpp")
28        )
29        self.assertTrue(
30            breakpoint and breakpoint.GetNumLocations() >= 1, VALID_BREAKPOINT
31        )
32
33        error = lldb.SBError()
34        # This is the launch info.  If you want to launch with arguments or
35        # environment variables, add them using SetArguments or
36        # SetEnvironmentEntries
37
38        launch_info = target.GetLaunchInfo()
39        process = target.Launch(launch_info, error)
40        self.assertTrue(process, PROCESS_IS_VALID)
41
42        # Did we hit our breakpoint?
43        from lldbsuite.test.lldbutil import get_threads_stopped_at_breakpoint
44
45        threads = get_threads_stopped_at_breakpoint(process, breakpoint)
46        self.assertEqual(
47            len(threads), 1, "There should be a thread stopped at our breakpoint"
48        )
49
50        # The hit count for the breakpoint should be 1.
51        self.assertEqual(breakpoint.GetHitCount(), 1)
52
53        frame = threads[0].GetFrameAtIndex(0)
54        disassembly = frame.Disassemble()
55        self.assertNotEqual(disassembly, "")
56        self.assertNotIn("error", disassembly)
57        self.assertIn(": nop", disassembly)
58