| """ |
| Test saving a core file (or mini dump). |
| """ |
| |
| from __future__ import print_function |
| |
| import os |
| import time |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class ProcessSaveCoreTestCase(TestBase): |
| |
| mydir = TestBase.compute_mydir(__file__) |
| |
| @not_remote_testsuite_ready |
| @skipUnlessWindows |
| def test_cannot_save_core_unless_process_stopped(self): |
| """Test that SaveCore fails if the process isn't stopped.""" |
| self.build() |
| exe = self.getBuildArtifact("a.out") |
| core = self.getBuildArtifact("core.dmp") |
| target = self.dbg.CreateTarget(exe) |
| process = target.LaunchSimple( |
| None, None, self.get_process_working_directory()) |
| self.assertNotEqual(process.GetState(), lldb.eStateStopped) |
| error = process.SaveCore(core) |
| self.assertTrue(error.Fail()) |
| |
| @not_remote_testsuite_ready |
| @skipUnlessWindows |
| def test_save_windows_mini_dump(self): |
| """Test that we can save a Windows mini dump.""" |
| self.build() |
| exe = self.getBuildArtifact("a.out") |
| core = self.getBuildArtifact("core.dmp") |
| try: |
| target = self.dbg.CreateTarget(exe) |
| breakpoint = target.BreakpointCreateByName("bar") |
| process = target.LaunchSimple( |
| None, None, self.get_process_working_directory()) |
| self.assertEqual(process.GetState(), lldb.eStateStopped) |
| self.assertTrue(process.SaveCore(core)) |
| self.assertTrue(os.path.isfile(core)) |
| self.assertTrue(process.Kill().Success()) |
| |
| # To verify, we'll launch with the mini dump, and ensure that we see |
| # the executable in the module list. |
| target = self.dbg.CreateTarget(None) |
| process = target.LoadCore(core) |
| files = [ |
| target.GetModuleAtIndex(i).GetFileSpec() for i in range( |
| 0, target.GetNumModules())] |
| paths = [ |
| os.path.join( |
| f.GetDirectory(), |
| f.GetFilename()) for f in files] |
| self.assertTrue(exe in paths) |
| |
| finally: |
| # Clean up the mini dump file. |
| self.assertTrue(self.dbg.DeleteTarget(target)) |
| if (os.path.isfile(core)): |
| os.unlink(core) |