MCPcopy Create free account
hub / github.com/Vector35/debugger / DefineVariablesRecursive

Method DefineVariablesRecursive

core/debuggercontroller.cpp:1483–1531  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1481
1482
1483void DebuggerController::DefineVariablesRecursive(uint64_t address, Confidence<Ref<Type>> type)
1484{
1485 size_t addressSize = m_liveView->GetAddressSize();
1486 if (type->IsPointer())
1487 {
1488 auto reader = BinaryReader(m_liveView);
1489 reader.Seek(address);
1490 uint64_t targetAddress = 0;
1491 bool readOk = false;
1492 if (addressSize == 8)
1493 {
1494 readOk = reader.TryRead64(targetAddress);
1495 }
1496 else if (addressSize == 4)
1497 {
1498 uint32_t addr;
1499 readOk = reader.TryRead32(addr);
1500 if (readOk)
1501 targetAddress = addr;
1502 }
1503 if (readOk)
1504 {
1505 // Define a data variable for the child
1506 ProcessOneVariable(targetAddress, type->GetChildType(), "");
1507 // Recurse into the child
1508 DefineVariablesRecursive(targetAddress, type->GetChildType());
1509 }
1510 }
1511 else if (type->IsStructure())
1512 {
1513 auto structure = type->GetStructure();
1514 auto members = structure->GetMembers();
1515 auto memberType = type->GetChildType();
1516 for (size_t i = 0; i < members.size(); i++)
1517 {
1518 uint64_t memberOffset = address + members[i].offset;
1519 DefineVariablesRecursive(memberOffset, members[i].type);
1520 }
1521 }
1522 else if (type->IsArray())
1523 {
1524 auto memberType = type->GetChildType();
1525 for (size_t i = 0; i < type->GetElementCount(); i++)
1526 {
1527 uint64_t memberOffset = address + i * memberType->GetWidth();
1528 DefineVariablesRecursive(memberOffset, memberType);
1529 }
1530 }
1531}
1532
1533
1534void DebuggerController::UpdateStackVariables()

Callers

nothing calls this directly

Calls 1

sizeMethod · 0.80

Tested by

no test coverage detected