]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - packages/Python/lldbsuite/test/functionalities/process_save_core/TestProcessSaveCore.py
Vendor import of lldb release_39 branch r276489:
[FreeBSD/FreeBSD.git] / packages / Python / lldbsuite / test / functionalities / process_save_core / TestProcessSaveCore.py
1 """
2 Test saving a core file (or mini dump).
3 """
4
5 from __future__ import print_function
6
7 import os, time
8 import lldb
9 from lldbsuite.test.decorators import *
10 from lldbsuite.test.lldbtest import *
11 from lldbsuite.test import lldbutil
12
13 class ProcessSaveCoreTestCase(TestBase):
14
15     mydir = TestBase.compute_mydir(__file__)
16
17     @not_remote_testsuite_ready
18     @skipUnlessWindows
19     def test_cannot_save_core_unless_process_stopped(self):
20         """Test that SaveCore fails if the process isn't stopped."""
21         self.build()
22         exe = os.path.join(os.getcwd(), "a.out")
23         core = os.path.join(os.getcwd(), "core.dmp")
24         target = self.dbg.CreateTarget(exe)
25         process = target.LaunchSimple(None, None, self.get_process_working_directory())
26         self.assertNotEqual(process.GetState(), lldb.eStateStopped)
27         error = process.SaveCore(core)
28         self.assertTrue(error.Fail())
29
30     @not_remote_testsuite_ready
31     @skipUnlessWindows
32     def test_save_windows_mini_dump(self):
33         """Test that we can save a Windows mini dump."""
34         self.build()
35         exe = os.path.join(os.getcwd(), "a.out")
36         core = os.path.join(os.getcwd(), "core.dmp")
37         try:
38             target = self.dbg.CreateTarget(exe)
39             breakpoint = target.BreakpointCreateByName("bar")
40             process = target.LaunchSimple(None, None, self.get_process_working_directory())
41             self.assertEqual(process.GetState(), lldb.eStateStopped)
42             self.assertTrue(process.SaveCore(core))
43             self.assertTrue(os.path.isfile(core))
44             self.assertTrue(process.Kill().Success())
45
46             # To verify, we'll launch with the mini dump, and ensure that we see
47             # the executable in the module list.
48             target = self.dbg.CreateTarget(None)
49             process = target.LoadCore(core)
50             files = [target.GetModuleAtIndex(i).GetFileSpec() for i in range(0, target.GetNumModules())]
51             paths = [os.path.join(f.GetDirectory(), f.GetFilename()) for f in files]
52             self.assertTrue(exe in paths)
53
54         finally:
55             # Clean up the mini dump file.
56             self.assertTrue(self.dbg.DeleteTarget(target))
57             if (os.path.isfile(core)):
58                 os.unlink(core)
59
60