brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.7 KiB · 10592bc Raw
494 lines · python
1"""2Test lldb data formatter subsystem.3"""4 5 6import lldb7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9from lldbsuite.test import lldbutil10 11 12class SmartArrayDataFormatterTestCase(TestBase):13    def test_with_run_command(self):14        """Test data formatter commands."""15        self.build()16        self.data_formatter_commands()17 18    def setUp(self):19        # Call super's setUp().20        TestBase.setUp(self)21        # Find the line number to break at.22        self.line = line_number("main.cpp", "// Set break point at this line.")23 24    def data_formatter_commands(self):25        """Test that that file and class static variables display correctly."""26        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)27 28        lldbutil.run_break_set_by_file_and_line(29            self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True30        )31 32        self.runCmd("run", RUN_SUCCEEDED)33 34        process = self.dbg.GetSelectedTarget().GetProcess()35 36        # The stop reason of the thread should be breakpoint.37        self.expect(38            "thread list",39            STOPPED_DUE_TO_BREAKPOINT,40            substrs=["stopped", "stop reason = breakpoint"],41        )42 43        # This is the function to remove the custom formats in order to have a44        # clean slate for the next test case.45        def cleanup():46            self.runCmd("type format clear", check=False)47            self.runCmd("type summary clear", check=False)48 49        # Execute the cleanup function during test case tear down.50        self.addTearDownHook(cleanup)51 52        # check that we are not looping here53        self.runCmd('type summary add --summary-string "${var%V}" SomeData')54 55        self.expect("frame variable data", substrs=["SomeData @ 0x"])56        # ${var%s}57        self.runCmd('type summary add --summary-string "ptr = ${var%s}" "char *"')58 59        self.expect("frame variable strptr", substrs=['ptr = "', "Hello world!"])60 61        self.expect(62            "frame variable other.strptr", substrs=['ptr = "', "Nested Hello world!"]63        )64 65        self.runCmd(66            'type summary add --summary-string "arr = ${var%s}" -x "char\\[[0-9]+\\]"'67        )68 69        self.expect("frame variable strarr", substrs=['arr = "', "Hello world!"])70 71        self.expect(72            "frame variable other.strarr", substrs=['arr = "', "Nested Hello world!"]73        )74 75        self.expect("expression strarr", substrs=['arr = "', "Hello world!"])76 77        self.expect(78            "expression other.strarr", substrs=['arr = "', "Nested Hello world!"]79        )80 81        # ${var%c}82        self.runCmd('type summary add --summary-string "ptr = ${var%c}" "char *"')83 84        self.expect("frame variable strptr", substrs=['ptr = "', "Hello world!"])85 86        self.expect(87            "frame variable other.strptr", substrs=['ptr = "', "Nested Hello world!"]88        )89 90        self.expect("expression strptr", substrs=['ptr = "', "Hello world!"])91 92        self.expect(93            "expression other.strptr", substrs=['ptr = "', "Nested Hello world!"]94        )95 96        self.runCmd(97            'type summary add --summary-string "arr = ${var%c}" -x "char\\[[0-9]+\\]"'98        )99 100        self.expect("frame variable strarr", substrs=['arr = "', "Hello world!"])101 102        self.expect(103            "frame variable other.strarr", substrs=['arr = "', "Nested Hello world!"]104        )105 106        self.expect("expression strarr", substrs=['arr = "', "Hello world!"])107 108        self.expect(109            "expression other.strarr", substrs=['arr = "', "Nested Hello world!"]110        )111 112        # ${var%char[]}113        self.runCmd(114            'type summary add --summary-string "arr = ${var%char[]}" -x "char\\[[0-9]+\\]"'115        )116 117        self.expect("frame variable strarr", substrs=['arr = "', "Hello world!"])118 119        self.expect(120            "frame variable other.strarr", substrs=["arr = ", "Nested Hello world!"]121        )122 123        self.expect("expression strarr", substrs=['arr = "', "Hello world!"])124 125        self.expect(126            "expression other.strarr", substrs=["arr = ", "Nested Hello world!"]127        )128 129        self.runCmd('type summary add --summary-string "ptr = ${var%char[]}" "char *"')130 131        self.expect("frame variable strptr", substrs=['ptr = "', "Hello world!"])132 133        self.expect(134            "frame variable other.strptr", substrs=['ptr = "', "Nested Hello world!"]135        )136 137        self.expect("expression strptr", substrs=['ptr = "', "Hello world!"])138 139        self.expect(140            "expression other.strptr", substrs=['ptr = "', "Nested Hello world!"]141        )142 143        # ${var%a}144        self.runCmd(145            'type summary add --summary-string "arr = ${var%a}" -x "char\\[[0-9]+\\]"'146        )147 148        self.expect("frame variable strarr", substrs=['arr = "', "Hello world!"])149 150        self.expect(151            "frame variable other.strarr", substrs=["arr = ", "Nested Hello world!"]152        )153 154        self.expect("expression strarr", substrs=['arr = "', "Hello world!"])155 156        self.expect(157            "expression other.strarr", substrs=["arr = ", "Nested Hello world!"]158        )159 160        self.runCmd('type summary add --summary-string "ptr = ${var%a}" "char *"')161 162        self.expect("frame variable strptr", substrs=['ptr = "', "Hello world!"])163 164        self.expect(165            "frame variable other.strptr", substrs=['ptr = "', "Nested Hello world!"]166        )167 168        self.expect("expression strptr", substrs=['ptr = "', "Hello world!"])169 170        self.expect(171            "expression other.strptr", substrs=['ptr = "', "Nested Hello world!"]172        )173 174        self.runCmd(175            'type summary add --summary-string "ptr = ${var[]%char[]}" "char *"'176        )177 178        # I do not know the size of the data, but you are asking for a full array slice..179        # use the ${var%char[]} to obtain a string as result180        self.expect(181            "frame variable strptr", matching=False, substrs=['ptr = "', "Hello world!"]182        )183 184        self.expect(185            "frame variable other.strptr",186            matching=False,187            substrs=['ptr = "', "Nested Hello world!"],188        )189 190        self.expect(191            "expression strptr", matching=False, substrs=['ptr = "', "Hello world!"]192        )193 194        self.expect(195            "expression other.strptr",196            matching=False,197            substrs=['ptr = "', "Nested Hello world!"],198        )199 200        # You asked an array-style printout...201        self.runCmd(202            'type summary add --summary-string "ptr = ${var[0-1]%char[]}" "char *"'203        )204 205        self.expect("frame variable strptr", substrs=["ptr = ", "[{H},{e}]"])206 207        self.expect("frame variable other.strptr", substrs=["ptr = ", "[{N},{e}]"])208 209        self.expect("expression strptr", substrs=["ptr = ", "[{H},{e}]"])210 211        self.expect("expression other.strptr", substrs=["ptr = ", "[{N},{e}]"])212 213        # using [] is required here214        self.runCmd('type summary add --summary-string "arr = ${var%x}" "int [5]"')215 216        self.expect(217            "frame variable intarr",218            matching=False,219            substrs=["0x00000001,0x00000001,0x00000002,0x00000003,0x00000005"],220        )221 222        self.expect(223            "frame variable other.intarr",224            matching=False,225            substrs=["0x00000009,0x00000008,0x00000007,0x00000006,0x00000005"],226        )227 228        self.runCmd('type summary add --summary-string "arr = ${var[]%x}" "int[5]"')229 230        self.expect(231            "frame variable intarr",232            substrs=[233                "intarr = arr =",234                "0x00000001,0x00000001,0x00000002,0x00000003,0x00000005",235            ],236        )237 238        self.expect(239            "frame variable other.intarr",240            substrs=[241                "intarr = arr =",242                "0x00000009,0x00000008,0x00000007,0x00000006,0x00000005",243            ],244        )245 246        # printing each array item as an array247        self.runCmd(248            'type summary add --summary-string "arr = ${var[]%uint32_t[]}" "int[5]"'249        )250 251        self.expect(252            "frame variable intarr",253            substrs=[254                "intarr = arr =",255                "{0x00000001},{0x00000001},{0x00000002},{0x00000003},{0x00000005}",256            ],257        )258 259        self.expect(260            "frame variable other.intarr",261            substrs=[262                "intarr = arr = ",263                "{0x00000009},{0x00000008},{0x00000007},{0x00000006},{0x00000005}",264            ],265        )266 267        # printing full array as an array268        self.runCmd(269            'type summary add --summary-string "arr = ${var%uint32_t[]}" "int[5]"'270        )271 272        self.expect(273            "frame variable intarr",274            substrs=[275                "intarr = arr =",276                "0x00000001,0x00000001,0x00000002,0x00000003,0x00000005",277            ],278        )279 280        self.expect(281            "frame variable other.intarr",282            substrs=[283                "intarr = arr =",284                "0x00000009,0x00000008,0x00000007,0x00000006,0x00000005",285            ],286        )287 288        # printing each array item as an array289        self.runCmd(290            'type summary add --summary-string "arr = ${var[]%float32[]}" "float[7]"'291        )292 293        self.expect(294            "frame variable flarr",295            substrs=[296                "flarr = arr =",297                "{78.5},{77.25},{78},{76.125},{76.75},{76.875},{77}",298            ],299        )300 301        self.expect(302            "frame variable other.flarr",303            substrs=[304                "flarr = arr = ",305                "{25.5},{25.25},{25.125},{26.75},{27.375},{27.5},{26.125}",306            ],307        )308 309        # printing full array as an array310        self.runCmd(311            'type summary add --summary-string "arr = ${var%float32[]}" "float[7]"'312        )313 314        self.expect(315            "frame variable flarr",316            substrs=["flarr = arr =", "78.5,77.25,78,76.125,76.75,76.875,77"],317        )318 319        self.expect(320            "frame variable other.flarr",321            substrs=["flarr = arr =", "25.5,25.25,25.125,26.75,27.375,27.5,26.125"],322        )323 324        # using array smart summary strings for pointers should make no sense325        self.runCmd(326            'type summary add --summary-string "arr = ${var%float32[]}" "float *"'327        )328        self.runCmd(329            'type summary add --summary-string "arr = ${var%int32_t[]}" "int *"'330        )331 332        self.expect(333            "frame variable flptr",334            matching=False,335            substrs=["78.5,77.25,78,76.125,76.75,76.875,77"],336        )337 338        self.expect("frame variable intptr", matching=False, substrs=["1,1,2,3,5"])339 340        # use y and Y341        self.runCmd('type summary add --summary-string "arr = ${var%y}" "float[7]"')342        self.runCmd('type summary add --summary-string "arr = ${var%y}" "int[5]"')343 344        if process.GetByteOrder() == lldb.eByteOrderLittle:345            self.expect(346                "frame variable flarr",347                substrs=[348                    "flarr = arr =",349                    "00 00 9d 42,00 80 9a 42,00 00 9c 42,00 40 98 42,00 80 99 42,00 c0 99 42,00 00 9a 42",350                ],351            )352        else:353            self.expect(354                "frame variable flarr",355                substrs=[356                    "flarr = arr =",357                    "42 9d 00 00,42 9a 80 00,42 9c 00 00,42 98 40 00,42 99 80 00,42 99 c0 00,42 9a 00 00",358                ],359            )360 361        if process.GetByteOrder() == lldb.eByteOrderLittle:362            self.expect(363                "frame variable other.flarr",364                substrs=[365                    "flarr = arr =",366                    "00 00 cc 41,00 00 ca 41,00 00 c9 41,00 00 d6 41,00 00 db 41,00 00 dc 41,00 00 d1 41",367                ],368            )369        else:370            self.expect(371                "frame variable other.flarr",372                substrs=[373                    "flarr = arr =",374                    "41 cc 00 00,41 ca 00 00,41 c9 00 00,41 d6 00 00,41 db 00 00,41 dc 00 00,41 d1 00 00",375                ],376            )377 378        if process.GetByteOrder() == lldb.eByteOrderLittle:379            self.expect(380                "frame variable intarr",381                substrs=[382                    "intarr = arr =",383                    "01 00 00 00,01 00 00 00,02 00 00 00,03 00 00 00,05 00 00 00",384                ],385            )386        else:387            self.expect(388                "frame variable intarr",389                substrs=[390                    "intarr = arr =",391                    "00 00 00 01,00 00 00 01,00 00 00 02,00 00 00 03,00 00 00 05",392                ],393            )394 395        if process.GetByteOrder() == lldb.eByteOrderLittle:396            self.expect(397                "frame variable other.intarr",398                substrs=[399                    "intarr = arr = ",400                    "09 00 00 00,08 00 00 00,07 00 00 00,06 00 00 00,05 00 00 00",401                ],402            )403        else:404            self.expect(405                "frame variable other.intarr",406                substrs=[407                    "intarr = arr = ",408                    "00 00 00 09,00 00 00 08,00 00 00 07,00 00 00 06,00 00 00 05",409                ],410            )411 412        self.runCmd('type summary add --summary-string "arr = ${var%Y}" "float[7]"')413        self.runCmd('type summary add --summary-string "arr = ${var%Y}" "int[5]"')414 415        if process.GetByteOrder() == lldb.eByteOrderLittle:416            self.expect(417                "frame variable flarr",418                substrs=[419                    "flarr = arr =",420                    "00 00 9d 42",421                    "00 80 9a 42",422                    "00 00 9c 42",423                    "00 40 98 42",424                    "00 80 99 42",425                    "00 c0 99 42",426                    "00 00 9a 42",427                ],428            )429        else:430            self.expect(431                "frame variable flarr",432                substrs=[433                    "flarr = arr =",434                    "42 9d 00 00",435                    "42 9a 80 00",436                    "42 9c 00 00",437                    "42 98 40 00",438                    "42 99 80 00",439                    "42 99 c0 00",440                    "42 9a 00 00",441                ],442            )443 444        if process.GetByteOrder() == lldb.eByteOrderLittle:445            self.expect(446                "frame variable other.flarr",447                substrs=[448                    "flarr = arr =",449                    "00 00 cc 41",450                    "00 00 ca 41",451                    "00 00 c9 41",452                    "00 00 d6 41",453                    "00 00 db 41",454                    "00 00 dc 41",455                    "00 00 d1 41",456                ],457            )458        else:459            self.expect(460                "frame variable other.flarr",461                substrs=[462                    "flarr = arr =",463                    "41 cc 00 00",464                    "41 ca 00 00",465                    "41 c9 00 00",466                    "41 d6 00 00",467                    "41 db 00 00",468                    "41 dc 00 00",469                    "41 d1 00 00",470                ],471            )472 473        if process.GetByteOrder() == lldb.eByteOrderLittle:474            self.expect(475                "frame variable intarr",476                substrs=["intarr = arr =", "....,01 00 00 00", "....,05 00 00 00"],477            )478        else:479            self.expect(480                "frame variable intarr",481                substrs=["intarr = arr =", "....,00 00 00 01", "....,00 00 00 05"],482            )483 484        if process.GetByteOrder() == lldb.eByteOrderLittle:485            self.expect(486                "frame variable other.intarr",487                substrs=["intarr = arr = ", "09 00 00 00", "....,07 00 00 00"],488            )489        else:490            self.expect(491                "frame variable other.intarr",492                substrs=["intarr = arr = ", "00 00 00 09", "....,00 00 00 07"],493            )494