brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · e7711a8 Raw
100 lines · python
1"""2Check for an issue where capping does not work because the Target pointer appears to be changing behind our backs3"""4 5 6import lldb7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9from lldbsuite.test import lldbutil10 11 12class SyntheticCappingTestCase(TestBase):13    def setUp(self):14        # Call super's setUp().15        TestBase.setUp(self)16        # Find the line number to break at.17        self.line = line_number("main.cpp", "// Set break point at this line.")18 19    def test_with_run_command(self):20        """Check for an issue where capping does not work because the Target pointer appears to be changing behind our backs."""21        self.build()22        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)23 24        lldbutil.run_break_set_by_file_and_line(25            self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True26        )27 28        self.runCmd("run", RUN_SUCCEEDED)29 30        process = self.dbg.GetSelectedTarget().GetProcess()31 32        # The stop reason of the thread should be breakpoint.33        self.expect(34            "thread list",35            STOPPED_DUE_TO_BREAKPOINT,36            substrs=["stopped", "stop reason = breakpoint"],37        )38 39        # This is the function to remove the custom formats in order to have a40        # clean slate for the next test case.41        def cleanup():42            self.runCmd("type format clear", check=False)43            self.runCmd("type summary clear", check=False)44            self.runCmd("type filter clear", check=False)45            self.runCmd("type synth clear", check=False)46            self.runCmd("settings set target.max-children-count 24", check=False)47 48        # Execute the cleanup function during test case tear down.49        self.addTearDownHook(cleanup)50 51        # set up the synthetic children provider52        self.runCmd("script from fooSynthProvider import *")53        self.runCmd("type synth add -l fooSynthProvider foo")54 55        # note that the value of fake_a depends on target byte order56        if process.GetByteOrder() == lldb.eByteOrderLittle:57            fake_a_val = 0x0200000058        else:59            fake_a_val = 0x0000010060 61        # check that the synthetic children work, so we know we are doing the62        # right thing63        self.expect(64            "frame variable f00_1",65            substrs=[66                "a = 1",67                "fake_a = %d" % fake_a_val,68                "r = 34",69            ],70        )71        # num_children() should be called with at most max_num_children=2572        # (target.max-children-count + 1)73        self.expect(74            "script fooSynthProvider.reset_max_num_children_max()", substrs=["25"]75        )76 77        # check that capping works78        self.runCmd("settings set target.max-children-count 2", check=False)79 80        self.expect(81            "frame variable f00_1",82            substrs=[83                "a = 1",84                "fake_a = %d" % fake_a_val,85                "...",86            ],87        )88        self.expect(89            "script fooSynthProvider.reset_max_num_children_max()", substrs=["3"]90        )91 92        self.expect("frame variable f00_1", matching=False, substrs=["r = 34"])93 94        self.runCmd("settings set target.max-children-count 256", check=False)95 96        self.expect("frame variable f00_1", matching=True, substrs=["r = 34"])97        self.expect(98            "script fooSynthProvider.reset_max_num_children_max()", substrs=["257"]99        )100