Для всех остальных, читающих этот вопрос, я покажу некоторую дополнительную информацию, касающуюся получения значения символа.Символ находится, как описано Эриком выше, но трудно понять, как получить действительное значение символа.Приведенный ниже код представляет собой процедуру, которая заполняет TMemo (memLocalVariables) локальными переменными при каждом вызове.Не хватает некоторых функций, таких как аккуратное форматирование значения переменной и доступ к параметрам вызова.Я вызываю это из состояния отладчика dsDebugSuspended.Менее интуитивный бит - это доступ к символьным данным в стеке и использование базового указателя стека.Отличный способ узнать, как работает компилятор!Но, может быть, где-то есть функция полезности, которую я не нашел ...?Эрик?
procedure DrawLocalVariables;
var
ProgramExecution : TdwsProgramExecution;
I : integer;
Sym : TSymbol;
V : variant;
Adr : integer;
SymbolTable : TSymbolTable;
begin
memLocalVariables.Lines.Clear;
ProgramExecution := TdwsProgramExecution( dwsDebugger1.Execution );
SymbolTable := ProgramExecution.CurrentProg.Table;
For I := 0 to SymbolTable.Count-1 do
begin
Sym := SymbolTable[I];
if Sym is TDataSymbol then
begin
Adr := TDataSymbol( Sym).StackAddr + ProgramExecution.Stack.BasePointer;
ProgramExecution.Stack.ReadValue( Adr, V );
memLocalVariables.Lines.Add( Format( '%s = %s', [ Sym.Name, VarToStr(V) ] ));
end;
end;
end;