| """ | |
| Test that argdumper is a viable launching strategy. | |
| """ | |
| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| class TestRerun(TestBase): | |
| def test(self): | |
| self.build() | |
| exe = self.getBuildArtifact("a.out") | |
| self.runCmd("target create %s" % exe) | |
| # Create the target | |
| target = self.dbg.CreateTarget(exe) | |
| # Create any breakpoints we need | |
| breakpoint = target.BreakpointCreateBySourceRegex( | |
| "break here", lldb.SBFileSpec("main.cpp", False) | |
| ) | |
| self.assertTrue(breakpoint, VALID_BREAKPOINT) | |
| self.runCmd("process launch 1 2 3") | |
| process = self.process() | |
| thread = lldbutil.get_one_thread_stopped_at_breakpoint(process, breakpoint) | |
| self.assertIsNotNone( | |
| thread, "Process should be stopped at a breakpoint in main" | |
| ) | |
| self.assertTrue(thread.IsValid(), "Stopped thread is not valid") | |
| self.expect("frame variable argv[1]", substrs=["1"]) | |
| self.expect("frame variable argv[2]", substrs=["2"]) | |
| self.expect("frame variable argv[3]", substrs=["3"]) | |
| # Let program exit | |
| self.runCmd("continue") | |
| # Re-run with no args and make sure we still run with 1 2 3 as arguments as | |
| # they should have been stored in "target.run-args" | |
| self.runCmd("process launch") | |
| process = self.process() | |
| thread = lldbutil.get_one_thread_stopped_at_breakpoint(process, breakpoint) | |
| self.assertIsNotNone( | |
| thread, "Process should be stopped at a breakpoint in main" | |
| ) | |
| self.assertTrue(thread.IsValid(), "Stopped thread is not valid") | |
| self.expect("frame variable argv[1]", substrs=["1"]) | |
| self.expect("frame variable argv[2]", substrs=["2"]) | |
| self.expect("frame variable argv[3]", substrs=["3"]) |