我在调试时检查TValue变量的字符串值时遇到问题。悬停菜单不显示字符串值,甚至将其添加到监视列表中似乎很棘手。
给出一个非常基本的示例控制台应用程序,例如
program Project1;
uses
System.SysUtils, System.Rtti;
var
Value: TValue;
begin
Value := 'Hello';
WriteLn(Value.AsType<string>);
ReadLn;
end.
在WriteLn
行添加断点,我可以将鼠标悬停在Value
变量上并查看值类型,但实际上并没有关于字符串值的任何信息,请参阅
接下来我尝试使用.AsType<string>
将其添加到监视列表中 - 但是在我的实际应用程序中,示例应用程序中的内部错误E2531(方法需要显式类型参数)中的内部错误。检查/取消选中允许副作用和功能的选项没有区别
。
最终工作的是创建转换功能,例如:
function ValueToString(const Value: TValue): string;
begin
Result := Value.AsType<string>;
end;
并在关注列表中使用此功能。我不得不在应用程序代码中使用此函数(例如在示例中的WriteLn
调用中)以避免链接器将其删除。这也意味着我必须将这个功能或包含此功能的单元添加到我想调试的每个单元中。
有更好的解决方案吗?
答案 0 :(得分:4)
使用TValue
的内置Value.ToString
可在手表中使用。 Value.AsString
也会评估。
答案 1 :(得分:1)
您也可以使用Value.AsVariant
。