186fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen"""
286fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny ChenThe evaluating printf(...) after break stop and then up a stack frame.
386fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen"""
486fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
586fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chenimport os, time
686fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chenimport unittest2
786fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chenimport lldb
886fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chenfrom lldbtest import *
9431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldbutil
1086fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
1186fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chenclass Radar9531204TestCase(TestBase):
1286fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
1386fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen    mydir = os.path.join("expression_command", "radar_9531204")
1486fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
1586fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen    # rdar://problem/9531204
1686fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen    def test_expr_commands(self):
1786fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        """The evaluating printf(...) after break stop and then up a stack frame."""
1886fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.buildDefault()
1986fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
2086fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
2186fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
22431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        lldbutil.run_break_set_by_symbol (self, 'foo', sym_exact=True, num_expected_locations=1)
2386fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
2486fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.runCmd("run", RUN_SUCCEEDED)
2586fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
2686fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.runCmd("frame variable")
2786fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
2886fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        # This works fine.
2986fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.runCmd('expression (int)printf("value is: %d.\\n", value);')
3086fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
3186fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        # rdar://problem/9531204
3286fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        # "Error dematerializing struct" error when evaluating expressions "up" on the stack
3386fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.runCmd('up') # frame select -r 1
3486fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
3586fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.runCmd("frame variable")
3686fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
3786fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        # This does not currently.
3886fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen        self.runCmd('expression (int)printf("argc is: %d.\\n", argc)')
3986fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
4086fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen
4186fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chenif __name__ == '__main__':
4286fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen    import atexit
4386fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen    lldb.SBDebugger.Initialize()
4486fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen    atexit.register(lambda: lldb.SBDebugger.Terminate())
4586fbeeb94ad5b587dfce9a958b3861589831bbe8Johnny Chen    unittest2.main()
46