[lldb] Fix SBMemoryRegionInfoListExtensions iter to yield unique refe… (#144815)

This commit is contained in:
Zyn
2025-06-23 11:02:51 -07:00
committed by GitHub
parent 7ce76e1ad1
commit ff865b639a
2 changed files with 24 additions and 3 deletions

View File

@@ -9,8 +9,8 @@
'''Iterate over all the memory regions in a lldb.SBMemoryRegionInfoList object.'''
import lldb
size = self.GetSize()
region = lldb.SBMemoryRegionInfo()
for i in range(size):
region = lldb.SBMemoryRegionInfo()
self.GetMemoryRegionAtIndex(i, region)
yield region
%}

View File

@@ -154,14 +154,35 @@ class FindInMemoryTestCase(TestBase):
self.assertEqual(addr, lldb.LLDB_INVALID_ADDRESS)
def test_memory_info_list_iterable(self):
"""Make sure the SBMemoryRegionInfoList is iterable"""
"""Make sure the SBMemoryRegionInfoList is iterable and each yielded object is unique"""
self.assertTrue(self.process, PROCESS_IS_VALID)
self.assertState(self.process.GetState(), lldb.eStateStopped, PROCESS_STOPPED)
info_list = self.process.GetMemoryRegions()
self.assertTrue(info_list.GetSize() > 0)
collected_info = []
try:
for info in info_list:
pass
collected_info.append(info)
except Exception:
self.fail("SBMemoryRegionInfoList is not iterable")
for i in range(len(collected_info)):
region = lldb.SBMemoryRegionInfo()
info_list.GetMemoryRegionAtIndex(i, region)
self.assertEqual(
collected_info[i],
region,
f"items {i}: iterator data should match index access data",
)
self.assertTrue(
len(collected_info) >= 2, "Test requires at least 2 memory regions"
)
self.assertNotEqual(
collected_info[0].GetRegionBase(),
collected_info[1].GetRegionBase(),
"Different items should have different base addresses",
)