调试包含字符串的 TValue
Debugging TValue containing a string
我在调试时无法检查 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(方法需要显式类型参数)在我的实际应用程序中。 check/uncheck 允许副作用和功能的选项没有区别
.
最终起作用的是为转换创建一个函数,例如
function ValueToString(const Value: TValue): string;
begin
Result := Value.AsType<string>;
end;
并在监视列表中使用它。不过,我不得不在应用程序代码中使用此函数(例如,在示例中的 WriteLn
调用中)以避免它被链接器删除。这也意味着我必须将此功能或包含此功能的单元添加到我要调试的每个单元。
有更好的解决方案吗?
在手表中使用 TValue
的内置 Value.ToString
。 Value.AsString
也评估。
您也可以使用 Value.AsVariant
。
我在调试时无法检查 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(方法需要显式类型参数)在我的实际应用程序中。 check/uncheck 允许副作用和功能的选项没有区别
.
最终起作用的是为转换创建一个函数,例如
function ValueToString(const Value: TValue): string;
begin
Result := Value.AsType<string>;
end;
并在监视列表中使用它。不过,我不得不在应用程序代码中使用此函数(例如,在示例中的 WriteLn
调用中)以避免它被链接器删除。这也意味着我必须将此功能或包含此功能的单元添加到我要调试的每个单元。
有更好的解决方案吗?
在手表中使用 TValue
的内置 Value.ToString
。 Value.AsString
也评估。
您也可以使用 Value.AsVariant
。