| """ |
| Test handling of the situation where the main thread exits but the other threads |
| in the process keep running. |
| """ |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| import lldbsuite.test.lldbutil as lldbutil |
| |
| |
| class ThreadExitTestCase(TestBase): |
| NO_DEBUG_INFO_TESTCASE = True |
| |
| # Needs os-specific implementation in the inferior |
| @skipIf(oslist=no_match(["linux"])) |
| def test(self): |
| self.build() |
| lldbutil.run_to_source_breakpoint( |
| self, "// break here", lldb.SBFileSpec("main.cpp") |
| ) |
| |
| # There should be one (non-main) thread left |
| self.assertEquals(self.process().GetNumThreads(), 1) |
| |
| # Ensure we can evaluate_expressions in this state |
| self.expect_expr("call_me()", result_value="12345") |
| |
| self.runCmd("continue") |
| # Exit code depends on the version of the linux kernel |
| self.assertIn(self.process().GetExitStatus(), [42, 47]) |