我远程调试一个大型应用程序之间的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的意图。