使用XE2远程调试 – 显示字符串

前端之家收集整理的这篇文章主要介绍了使用XE2远程调试 – 显示字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我远程调试一个大型应用程序之间的DEIphi XE2(更新#4)和Windows XP目标。 PAServer正在目标上运行,应用程序运行正常,并在断点停止(你不会相信这个成就是多么的困难 – 提示删除您的DPROJ,并重新启动,如果它已经通过任何IDE之前的XE)。

我注意到,局部变量和手表的显示显示我的字符串以一种奇怪的格式相比,通常显示的’一些字符串’格式,在本地调试时看到。我懂了:

任何人都可以告诉我为什么这样显示字符串?我也得到相当多的{NULL}和{}之间的垃圾输出变量尚未分配。
谢谢。

。我看到这个格式表示宽字符串。我在Windows 7上尝试了一个简单的应用程序,并得到以下结果。我的应用程序在断点:

显示的本地字符串变量:

注意截断的“Hello”。看来XE2有时会出现远程Unicode字符串的问题。我的PaServer是版本1.0.2。任何人都可以检查这是最新的? ‘从更新#4取得的Twas …

解决方法

我不完全确定为什么你有{}围绕字符串值,我的预感是,它是证明值是来自远程执行 – 但我知道一个事实,S被截断,由于优化… …
{$O-} // Disable Optimization
var
  S: AnsiString;
  S2: UnicodeString;
begin
  S := 'Hello';
  S2 := 'Hello2';
  ShowMessage(S2);
end;
{$O+} // Enable Optimization

现在,您将注意到,调试时“Hello”(变量S的)值保持不变。同样,如果您使用分配给S的值:

var
  S: AnsiString;
  S2: UnicodeString;
begin
  S := 'Hello';
  S2 := 'Hello2';
  ShowMessage(S + S2);
end;

Delphi的优化现在识别S在其有效范围内被使用,因此值被保留。

所以,你所谓的“错误”实际上是一个“编译器功能”,正如Borland / Inprise / Codegear / Embarcadero的意图。

猜你在找的Delphi相关文章