调试包含字符串

时间:2017-08-02 08:04:31

标签: delphi delphi-10.2-tokyo

我在调试时检查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>将其添加到监视列表中 - 但是在我的实际应用程序中,示例应用程序中的内部错误E2531(方法需要显式类型参数)中的内部错误。检查/取消选中允许副作用和功能的选项没有区别 。 Watch list error

最终工作的是创建转换功能,例如:

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

并在关注列表中使用此功能。我不得不在应用程序代码中使用此函数(例如在示例中的WriteLn调用中)以避免链接器将其删除。这也意味着我必须将这个功能或包含此功能的单元添加到我想调试的每个单元中。

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

使用TValue的内置Value.ToString可在手表中使用。 Value.AsString也会评估。

答案 1 :(得分:1)

您也可以使用Value.AsVariant