使用XE2远程debugging – 显示string

我正在远程debuggingDElphi XE2(更新#4)和Windows XP目标之间的大型应用程序。 PAServer运行在目标上,应用程序正常运行并停在断点处(你不会相信这个成绩有多难 – 暗示 – 删除你的DPROJ,如果在XE之前已经通过任何IDE,那么重新开始)。

我注意到局部variables和监视器的显示以一种奇怪的格式显示我的string,与通常显示在本地debugging时看到的'some string'格式相比。 我懂了:

在这里输入图像说明

谁能告诉我为什么这样的string显示? 对于尚未分配的输出variables,{}之间的{}}也会产生相当大的{NULL}和垃圾。 谢谢。

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

在这里输入图像说明

显示的本地stringvariables:

在这里输入图像说明

请注意截断的“你好”。 看起来XE2有时在远程Unicodestring上有问题。 我的PaServer是1.0.2版本。 任何人都可以检查这是最新的? '从更新#4采取的Twas …

我不完全确定你为什么在string值附近有{},我的直觉是说明这些值是来自远程执行 – 但是我知道S因为优化而被截断…

 {$O-} // Disable Optimization var S: AnsiString; S2: UnicodeString; begin S := 'Hello'; S2 := 'Hello2'; ShowMessage(S2); end; {$O+} // Enable Optimization 

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

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

Delphi的优化现在可以确定S在其有效范围内被使用,所以值被保留。

所以,你所说的“bug”实际上就是Borland / Inprise / Codegear / Embarcadero打算的“编译器特性”。

(我从@Dave复制代码)

 var S1: AnsiString; S2: UnicodeString; begin S1 := 'Foo'; S2 := 'Bar'; ShowMessage(Format('%s!', S2)); end; 

我猜这里的本地variablesS1是优化的,因为它没有在任何地方使用,所以值不再相关。

试试在本地机器上运行,你能看到S1吗?

我不知道是否属于,但我知道System.AnsiStrings包含专门的命令,如“格式”等…使用类似下面的东西可能会解决您的问题:

 var S1: AnsiString; S2: UnicodeString; begin S1 := 'Foo'; S2 := 'Bar'; ShowMessage(Format('%s!', S2)); end; 

还有一些开放的错误,只是为了排除任何这些,你使用的是什么特定版本的操作系统和工具,即Win7的X64旗舰版等?

项目 – >选项 – > Delphi编译器 – >链接 – >包含远程debugging符号= true