Skip to content

Commit ee7e3c9

Browse files
Copilotxusheng6
andcommitted
Update Debugger Info widget: remove text separator, add Storage column, show 16 stack entries
Co-authored-by: xusheng6 <[email protected]>
1 parent c4c0115 commit ee7e3c9

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

ui/debuggerinfowidget.cpp

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -570,25 +570,20 @@ std::vector<DebuggerInfoEntry> DebuggerInfoTable::getStackInfo(const ViewLocatio
570570
uint64_t stackPointer = m_debugger->StackPointer();
571571
size_t addressSize = arch->GetAddressSize();
572572

573-
// Add separator entry
574-
std::vector<InstructionTextToken> separatorTokens;
575-
separatorTokens.emplace_back(TextToken, "--- Stack Contents ---");
576-
result.emplace_back(separatorTokens, 0, "", BN_INVALID_EXPR, BN_INVALID_EXPR, 0);
577-
578573
// Get stack register name for display
579574
auto stackReg = arch->GetStackPointerRegister();
580575
auto stackRegName = arch->GetRegisterName(stackReg);
581576

582577
// Read stack contents - show values at rsp, rsp+0x8, rsp+0x10, etc.
583578
BinaryReader reader(m_data);
584-
for (int i = 0; i < 8; i++) // Show 8 stack entries
579+
for (int i = 0; i < 16; i++) // Show 16 stack entries (increased from 8)
585580
{
586581
ptrdiff_t offset = i * addressSize;
587-
uint64_t address = stackPointer + offset;
582+
uint64_t stackAddress = stackPointer + offset;
588583

589584
try
590585
{
591-
reader.Seek(address);
586+
reader.Seek(stackAddress);
592587
uint64_t value = 0;
593588

594589
switch (addressSize)
@@ -640,7 +635,8 @@ std::vector<DebuggerInfoEntry> DebuggerInfoTable::getStackInfo(const ViewLocatio
640635
}
641636
}
642637

643-
result.emplace_back(tokens, value, hint, BN_INVALID_EXPR, BN_INVALID_EXPR, address);
638+
// Create stack entry with storage address and stack flag
639+
result.emplace_back(tokens, value, hint, BN_INVALID_EXPR, BN_INVALID_EXPR, stackAddress, stackAddress, true);
644640
}
645641
catch (const std::exception&)
646642
{
@@ -803,6 +799,14 @@ void DebuggerInfoEntryItemDelegate::paint(QPainter *painter, const QStyleOptionV
803799
painter->setPen(getThemeColor(StringColor));
804800
painter->drawText(textRect, QString::fromStdString(entry->hints));
805801
break;
802+
case StorageColumn:
803+
if (entry->isStackEntry)
804+
{
805+
painter->setPen(getThemeColor(AddressColor));
806+
painter->drawText(textRect, QString::asprintf("0x%llx", entry->storageAddress));
807+
}
808+
// Draw nothing for non-stack entries (empty column)
809+
break;
806810
default:
807811
break;
808812
}
@@ -866,7 +870,7 @@ int DebuggerInfoEntryItemModel::rowCount(const QModelIndex &parent) const
866870

867871
int DebuggerInfoEntryItemModel::columnCount(const QModelIndex &parent) const
868872
{
869-
return 3;
873+
return 4; // Added StorageColumn
870874
}
871875

872876

@@ -887,6 +891,7 @@ QVariant DebuggerInfoEntryItemModel::data(const QModelIndex &index, int role) co
887891
case ExprColumn:
888892
case ValueColumn:
889893
case HintColumn:
894+
case StorageColumn:
890895
result.setValue(item);
891896
break;
892897
default:
@@ -915,6 +920,19 @@ QVariant DebuggerInfoEntryItemModel::data(const QModelIndex &index, int role) co
915920
case HintColumn:
916921
result.setValue(item->hints.size());
917922
break;
923+
case StorageColumn:
924+
{
925+
if (item->isStackEntry)
926+
{
927+
auto str = QString::asprintf("0x%llx", item->storageAddress);
928+
result.setValue(str.size());
929+
}
930+
else
931+
{
932+
result.setValue(0); // Empty for non-stack entries
933+
}
934+
break;
935+
}
918936
default:
919937
break;
920938
}
@@ -948,6 +966,8 @@ QVariant DebuggerInfoEntryItemModel::headerData(int column, Qt::Orientation orie
948966
return "Value";
949967
case HintColumn:
950968
return "Hint";
969+
case StorageColumn:
970+
return "Storage";
951971
}
952972
return QVariant();
953973
}
@@ -999,6 +1019,7 @@ void DebuggerInfoTable::updateColumnWidths()
9991019
resizeColumnToContents(ExprColumn);
10001020
resizeColumnToContents(ValueColumn);
10011021
resizeColumnToContents(HintColumn);
1022+
resizeColumnToContents(StorageColumn);
10021023
}
10031024

10041025

ui/debuggerinfowidget.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ enum ColumnHeaders
4141
ExprColumn,
4242
ValueColumn,
4343
HintColumn,
44+
StorageColumn,
4445
};
4546

4647

@@ -52,9 +53,12 @@ struct DebuggerInfoEntry
5253
size_t instrIndex;
5354
size_t operandIndex;
5455
uint64_t address;
56+
uint64_t storageAddress; // For stack entries, this will be the actual stack address
57+
bool isStackEntry; // Flag to identify stack entries
5558

5659
DebuggerInfoEntry(const std::vector<InstructionTextToken>& t, intx::uint512 v, const std::string& h, size_t i, size_t o,
57-
uint64_t a): tokens(t), value(v), hints(h), instrIndex(i), operandIndex(o), address(a)
60+
uint64_t a, uint64_t sa = 0, bool stack = false):
61+
tokens(t), value(v), hints(h), instrIndex(i), operandIndex(o), address(a), storageAddress(sa), isStackEntry(stack)
5862
{}
5963
};
6064

0 commit comments

Comments
 (0)