| """ |
| Test lldb-mi -exec-xxx commands. |
| """ |
| |
| from __future__ import print_function |
| |
| |
| import lldbmi_testcase |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class MiExecTestCase(lldbmi_testcase.MiTestCaseBase): |
| |
| mydir = TestBase.compute_mydir(__file__) |
| |
| @skipIfRemote # We do not currently support remote debugging via the MI. |
| @skipIfWindows # llvm.org/pr24452: Get lldb-mi tests working on Windows |
| @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races |
| def test_lldbmi_exec_abort(self): |
| """Test that 'lldb-mi --interpreter' works for -exec-abort.""" |
| |
| self.spawnLldbMi(args=None) |
| |
| # Test that -exec-abort fails on invalid process |
| self.runCmd("-exec-abort") |
| self.expect( |
| "\^error,msg=\"Command 'exec-abort'\. Invalid process during debug session\"") |
| |
| # Load executable |
| self.runCmd("-file-exec-and-symbols %s" % self.myexe) |
| self.expect("\^done") |
| |
| # Set arguments |
| self.runCmd("-exec-arguments arg1") |
| self.expect("\^done") |
| |
| # Run to main |
| self.runCmd("-break-insert -f main") |
| self.expect("\^done,bkpt={number=\"1\"") |
| self.runCmd("-exec-run") |
| self.expect("\^running") |
| self.expect("\*stopped,reason=\"breakpoint-hit\"") |
| |
| # Test that arguments were passed |
| self.runCmd("-data-evaluate-expression argc") |
| self.expect("\^done,value=\"2\"") |
| |
| # Test that program may be aborted |
| self.runCmd("-exec-abort") |
| self.expect("\^done") |
| self.expect("\*stopped,reason=\"exited-normally\"") |
| |
| # Test that program can be run again |
| self.runCmd("-exec-run") |
| self.expect("\^running") |
| self.expect("\*stopped,reason=\"breakpoint-hit\"") |
| |
| # Test that arguments were passed again |
| self.runCmd("-data-evaluate-expression argc") |
| self.expect("\^done,value=\"2\"") |
| |
| # Test that program may be aborted again |
| self.runCmd("-exec-abort") |
| self.expect("\^done") |
| self.expect("\*stopped,reason=\"exited-normally\"") |
| |
| @skipIfRemote # We do not currently support remote debugging via the MI. |
| @skipIfWindows # llvm.org/pr24452: Get lldb-mi tests working on Windows |
| @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races |
| def test_lldbmi_exec_arguments_set(self): |
| """Test that 'lldb-mi --interpreter' can pass args using -exec-arguments.""" |
| |
| self.spawnLldbMi(args=None) |
| |
| # Load executable |
| self.runCmd("-file-exec-and-symbols %s" % self.myexe) |
| self.expect("\^done") |
| |
| # Set arguments |
| self.runCmd( |
| "-exec-arguments --arg1 \"2nd arg\" third_arg fourth=\"4th arg\"") |
| self.expect("\^done") |
| |
| # Run to main |
| self.runCmd("-break-insert -f main") |
| self.expect("\^done,bkpt={number=\"1\"") |
| self.runCmd("-exec-run") |
| self.expect("\^running") |
| self.expect("\*stopped,reason=\"breakpoint-hit\"") |
| |
| # Check argc and argv to see if arg passed |
| # Note that exactly=True is needed to avoid extra escaping for re |
| self.runCmd("-data-evaluate-expression argc") |
| self.expect("\^done,value=\"5\"") |
| #self.runCmd("-data-evaluate-expression argv[1]") |
| # self.expect("\^done,value=\"--arg1\"") |
| self.runCmd("-interpreter-exec command \"print argv[1]\"") |
| self.expect("\\\"--arg1\\\"", exactly=True) |
| #self.runCmd("-data-evaluate-expression argv[2]") |
| #self.expect("\^done,value=\"2nd arg\"") |
| self.runCmd("-interpreter-exec command \"print argv[2]\"") |
| self.expect("\\\"2nd arg\\\"", exactly=True) |
| #self.runCmd("-data-evaluate-expression argv[3]") |
| # self.expect("\^done,value=\"third_arg\"") |
| self.runCmd("-interpreter-exec command \"print argv[3]\"") |
| self.expect("\\\"third_arg\\\"", exactly=True) |
| #self.runCmd("-data-evaluate-expression argv[4]") |
| #self.expect("\^done,value=\"fourth=\\\\\\\"4th arg\\\\\\\"\"") |
| self.runCmd("-interpreter-exec command \"print argv[4]\"") |
| self.expect("\\\"fourth=\\\\\\\"4th arg\\\\\\\"\\\"", exactly=True) |
| |
| @skipIfRemote # We do not currently support remote debugging via the MI. |
| @skipIfWindows # llvm.org/pr24452: Get lldb-mi tests working on Windows |
| @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races |
| def test_lldbmi_exec_arguments_reset(self): |
| """Test that 'lldb-mi --interpreter' can reset previously set args using -exec-arguments.""" |
| |
| self.spawnLldbMi(args=None) |
| |
| # Load executable |
| self.runCmd("-file-exec-and-symbols %s" % self.myexe) |
| self.expect("\^done") |
| |
| # Set arguments |
| self.runCmd("-exec-arguments arg1") |
| self.expect("\^done") |
| self.runCmd("-exec-arguments") |
| self.expect("\^done") |
| |
| # Run to main |
| self.runCmd("-break-insert -f main") |
| self.expect("\^done,bkpt={number=\"1\"") |
| self.runCmd("-exec-run") |
| self.expect("\^running") |
| self.expect("\*stopped,reason=\"breakpoint-hit\"") |
| |
| # Check argc to see if arg passed |
| self.runCmd("-data-evaluate-expression argc") |
| self.expect("\^done,value=\"1\"") |