2017-08-02 46 views
1

我無法檢查一個變量TValue的字符串值在調試。懸停菜單不顯示字符串值,甚至將它添加到監視列表似乎很棘手。調試TValue包含字符串

給出一個非常基本的示例控制檯應用程序,像

program Project1; 

uses 
    System.SysUtils, System.Rtti; 

var 
    Value: TValue; 
begin 
    Value := 'Hello'; 
    WriteLn(Value.AsType<string>); 
    ReadLn; 
end. 

添加斷點到WriteLn線,我可以將鼠標懸停在Value變量和看到的價值類型,但確實沒有任何信息的字符串值,見

Variable in Debugger

我試圖將其添加到監視列表,使用.AsType<string>接下來的事情 - 但監視列表的錯誤 - 內部電子郵件示例應用程序中的Rror,E2531(方法需要顯式類型參數)在我的真實應用程序中。選中/取消選中以允許副作用和功能 沒有區別。 Watch list error

最後的工作是爲轉換創建一個函數,

function ValueToString(const Value: TValue): string; 
begin 
    Result := Value.AsType<string>; 
end; 

並將其用於關注列表中。我不得不在應用代碼中使用這個函數(例如在示例中的WriteLn調用中)以避免它被鏈接器刪除。這也意味着我必須將這個函數或包含這個函數的單元添加到我想要調試的每個單元。

有沒有更好的解決方案?

+0

一些提示也許在這裏:一個簡單的可視化調試,2010年德爾福(https://stackoverflow.com/q/1425988/576719)。 –

+0

並鏈接到[文件](http://docwiki.embarcadero.com/RADStudio/en/Debugger_Visualizers) –

+0

@LURD所以寫的'TValue'我自己的調試可視化工具?我一定會記在心裏,但我希望它你可以問問在G + DelphiDevelopers論壇的意見,以及只是一個不得已的選擇:) –

回答

4

使用內置在手錶Value.ToString作品TValue的。 Value.AsString也評估。

1

您可以使用Value.AsVariant,也是如此。