Jonas Devlieghere 4b94c08a57
[lldb] Relax the error message in TestProcessCrashInfo.py (#153653)
The error message has been updated in macOS 26. Relax the error message
to check the more generic "BUG IN CLIENT OF LIBMALLOC" rather than the
error message that comes after.
2025-08-18 14:01:41 -05:00

93 lines
2.8 KiB
Python

"""
Test lldb process crash info.
"""
import os
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
from lldbsuite.test import lldbtest
class PlatformProcessCrashInfoTestCase(TestBase):
def setUp(self):
TestBase.setUp(self)
self.runCmd("settings set auto-confirm true")
self.source = "main.c"
self.line = line_number(self.source, "// break here")
def tearDown(self):
self.runCmd("settings clear auto-confirm")
TestBase.tearDown(self)
@skipIfAsan # The test process intentionally double-frees.
@skipUnlessDarwin
def test_cli(self):
"""Test that `process status --verbose` fetches the extended crash
information dictionary from the command-line properly."""
self.build()
exe = self.getBuildArtifact("a.out")
self.expect("file " + exe, patterns=["Current executable set to .*a.out"])
self.expect("process launch", patterns=["Process .* launched: .*a.out"])
self.expect(
"process status --verbose",
patterns=[
"Extended Crash Information",
"Crash-Info Annotations",
"BUG IN CLIENT OF LIBMALLOC",
],
)
@skipIfAsan # The test process intentionally hits a memory bug.
@skipUnlessDarwin
def test_api(self):
"""Test that lldb can fetch a crashed process' extended crash information
dictionary from the api properly."""
self.build()
target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
self.assertTrue(target, VALID_TARGET)
target.LaunchSimple(None, None, os.getcwd())
stream = lldb.SBStream()
self.assertTrue(stream)
process = target.GetProcess()
self.assertTrue(process)
crash_info = process.GetExtendedCrashInformation()
error = crash_info.GetAsJSON(stream)
self.assertSuccess(error)
self.assertTrue(crash_info.IsValid())
self.assertIn("BUG IN CLIENT OF LIBMALLOC", stream.GetData())
# dyld leaves permanent crash_info records when testing on device.
@skipIfDarwinEmbedded
def test_on_sane_process(self):
"""Test that lldb doesn't fetch the extended crash information
dictionary from a 'sane' stopped process."""
self.build()
target, _, _, _ = lldbutil.run_to_line_breakpoint(
self, lldb.SBFileSpec(self.source), self.line
)
stream = lldb.SBStream()
self.assertTrue(stream)
process = target.GetProcess()
self.assertTrue(process)
crash_info = process.GetExtendedCrashInformation()
error = crash_info.GetAsJSON(stream)
self.assertFalse(error.Success())
self.assertIn("No structured data.", error.GetCString())