I'm remote debugging a large app between DElphi XE2 (update #4) and a Windows XP target. PAServer is running on the target and the application works fine and stops at breakpoints (you would NOT believe how hard just that achievement was - hint - delete your DPROJ and start again if it has been through any IDE prior to XE).
I notice that the display of local variables and watches show my strings in a strange format compared to the usual display of the 'some string' format that one sees when debugging locally. I see:
Can anyone tell me why the strings are displayed this way? I also get quite a bit of { NULL } and garbage between {}'s on output variables that are not yet assigned. Thanks.
. I see that this format indicates wide strings. I tried a simple app on Windows 7 and got the following result. My App at a breakpoint:
The displayed local string variables:
Note the truncated 'Hello'. It would seem that XE2 has a problem with remote unicode strings at times. My PaServer is version 1.0.2. Can anyone check that this is the latest? 'Twas taken from Update #4...
I'm not entirely sure why you have the {} around the string values, - my hunch is that it is to demonstrate that the values are coming from a remote execution - but I know for a fact that S
is being truncated due to optimization...
{$O-} // Disable Optimization
var
S: AnsiString;
S2: UnicodeString;
begin
S := 'Hello';
S2 := 'Hello2';
ShowMessage(S2);
end;
{$O+} // Enable Optimization
You'll now note that the value 'Hello' (of variable S
) remains intact when debugging. Likewise if you make use of the value assigned to S
:
var
S: AnsiString;
S2: UnicodeString;
begin
S := 'Hello';
S2 := 'Hello2';
ShowMessage(S + S2);
end;
Delphi's optimization now identifies that S
is being used within its valid scope, and so the value is preserved.
So, what you're calling a "bug" is in fact a "compiler feature" exactly as Borland/Inprise/Codegear/Embarcadero intended.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With