我正在爲DWScript編寫一個IDE,並使用調試器逐步完成代碼。我現在想添加一個「局部變量」(即範圍內的)的顯示。有人能給我一個指向這樣做的方法嗎?我可以得到所有符號的列表,但不知道如何獲取當前作用域的一部分。 謝謝。如何使用DWScript及其調試器創建「局部變量」顯示
回答
演員的IdwsProgramExecution到TdwsProgramExecution,你會獲得一個 「CurrentProg」,性質,TdwsProgram既不是一個TdwsMainProgram(如果你在主要是)或一個TdwsProcedure(如果你在一個proc/func /方法)。那些將有表屬性,它列出了本地符號,這是最直接的範圍。 那表將有一個或多個父母,它涉及父範圍(分層,就源代碼範圍而言)。
如果在TdwsProcedure,你可能也想看看它FuncSymbol財產,這將有一個參數表(有用的,如果你想直接從局部範圍的其餘部分隔離參數)
對於任何其他人閱讀這個問題,我會顯示一些關於獲得符號價值的補充信息。這個符號是按Eric的描述找到的,但是很難弄清楚如何獲得符號的實際值。下面的代碼是一個過程,每次調用時都會使用局部變量填充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;
您可以使用TdwsCompiler.Evaluate來使用局部變量(調試器的觀察者使用該變量)評估變量或表達式。不過,直接堆棧訪問是最有效的方法,如果您只需要變量的值,但Evaluate允許更容易地獲取類變量的ClassName f.i. –
好點Eric,謝謝,我沒有想到這一點 –
- 1. 如何使用局部變量創建全局變量?
- 2. 如何使用其他局部變量聲明局部變量?
- 3. visual studio 2013局部變量不在調試器中顯示
- 4. Jgrasp調試器不顯示局部變量
- 5. 使用局部變量創建R函數使用其值
- 6. 何時創建局部變量以及何時調用對象方法?
- 7. 如何在創建Url.Action調用時引用局部變量?
- 8. GDB:創建局部變量?
- 9. 實例化局部變量顯示調試檢查
- 10. 創建動態局部變量並將其傳遞給局部變量
- 11. MPI及其全局變量
- 12. 動態數組變量未顯示在局部變量調試窗口中
- 13. PhpEd調試器顯示變量空值
- 14. JQuery - 使用$(this)選擇器全局變量來創建變量?
- 15. VS 2010 C++局部變量調試
- 16. 如何在Python中使用其他變量創建變量?
- 17. 如何使用dwscript調用CreateOleObject函數?
- 18. 如何顯示調試器變量內容
- 19. 腳本試圖創建全局變量
- 20. 使用其他變量作爲計數器創建JavaScript變量
- 21. Slimv回溯不顯示局部變量
- 22. Resharper Intellisense不顯示局部變量
- 23. 僅在Haml創建局部變量
- 24. 將對象創建爲局部變量
- 25. 當局部變量堆棧被創建?
- 26. 迭代創建局部變量?
- 27. 局部變量 - 重新創建
- 28. 如何在Intellij IDEA的調用方法中創建默認局部變量?
- 29. 如何讓調試器在Visual Studio中顯示未使用的變量?
- 30. 與局部變量其中
謝謝Eric,第一次工作。 –