2026-01-09 15:00:59 -06:00

139 lines
4.7 KiB
Python

import re
import uuid
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
class SBTargetExtensionsTestCase(TestBase):
def test_equality(self):
"""Test the equality operator for SBTarget."""
self.build()
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target.IsValid())
self.assertEqual(target, target)
self.assertNotEqual(target, lldb.SBTarget())
def test_module_access(self):
"""Test the module access extension properties and methods."""
self.build()
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target.IsValid())
self.assertTrue(len(target.modules) > 0)
module = target.module[0]
self.assertTrue(module.IsValid())
self.assertEqual(target.module["a.out"], module)
self.assertEqual(target.module[module.file.fullpath], module)
uuid_str = module.GetUUIDString()
if uuid_str:
try:
uuid_obj = uuid.UUID(uuid_str)
self.assertEqual(target.module[uuid_obj], module)
except ValueError:
pass
self.assertEqual(len(target.module[re.compile("a.out")]), 1)
self.assertEqual(target.module[re.compile("a.out")][0], module)
def test_process_creation(self):
"""Test process creation via extensions."""
self.build()
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target.IsValid())
self.assertFalse(target.process.IsValid())
process = target.LaunchSimple(None, None, self.get_process_working_directory())
self.assertTrue(process.IsValid())
self.assertEqual(target.process.GetProcessID(), process.GetProcessID())
def test_breakpoints(self):
"""Test breakpoint access via extensions."""
self.build()
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target.IsValid())
breakpoint = target.BreakpointCreateBySourceRegex(
"Set breakpoint here", lldb.SBFileSpec("main.c")
)
self.assertTrue(breakpoint.IsValid())
self.assertEqual(target.num_breakpoints, 1)
self.assertEqual(len(target.breakpoints), 1)
self.assertEqual(target.breakpoint[0].GetID(), target.breakpoints[0].GetID())
self.assertEqual(
target.FindBreakpointByID(breakpoint.GetID()).GetID(), breakpoint.GetID()
)
def test_watchpoints(self):
"""Test watchpoint access via extensions."""
self.build()
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target.IsValid())
breakpoint = target.BreakpointCreateBySourceRegex(
"Set breakpoint here", lldb.SBFileSpec("main.c")
)
self.assertTrue(breakpoint.IsValid())
process = target.LaunchSimple(None, None, self.get_process_working_directory())
self.assertTrue(process.IsValid())
self.assertEqual(process.GetState(), lldb.eStateStopped)
variables = target.FindGlobalVariables("g_var", 1)
self.assertTrue(variables.GetSize() > 0)
global_variable = variables.GetValueAtIndex(0)
error = lldb.SBError()
watchpoint = target.WatchAddress(
global_variable.GetLoadAddress(), 4, False, True, error
)
self.assertTrue(error.Success(), f"Watchpoint failed: {error.GetCString()}")
self.assertTrue(target.num_watchpoints > 0)
self.assertEqual(len(target.watchpoints), target.num_watchpoints)
self.assertEqual(target.watchpoint[0].GetID(), target.watchpoints[0].GetID())
self.assertEqual(target.watchpoint[0].GetID(), watchpoint.GetID())
def test_other_properties(self):
"""Test miscellaneous properties of SBTarget."""
self.build()
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target.IsValid())
self.assertTrue(target.executable.IsValid())
self.assertEqual(target.debugger.GetID(), self.dbg.GetID())
self.assertTrue(target.broadcaster.IsValid())
self.assertIn(
target.byte_order,
[lldb.eByteOrderLittle, lldb.eByteOrderBig, lldb.eByteOrderInvalid],
)
self.assertTrue(target.addr_size > 0)
self.assertIsNotNone(target.triple)
self.assertIsNotNone(target.arch_name)
self.assertTrue(target.data_byte_size > 0)
self.assertGreater(target.data_byte_size, 0)
self.assertGreater(target.code_byte_size, 0)
self.assertTrue(target.platform.IsValid())