1

我在调试时无法检查 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示例中的调用中)以避免它被链接器删除。这也意味着我必须将这个函数或包含这个函数的单元添加到我要调试的每个单元中。

有更好的解决方案吗?

4

2 回答 2

4

在手表中使用TValue's 的内置功能。也评价。Value.ToStringValue.AsString

于 2017-08-02T08:27:25.810 回答
1

您也可以使用Value.AsVariant

于 2017-08-02T15:08:52.937 回答