Remote debugging with XE2 - display of strings
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.
(I am copying code from @Dave)
var
S1: AnsiString;
S2: UnicodeString;
begin
S1 := 'Foo';
S2 := 'Bar';
ShowMessage(Format('%s!', S2));
end;
I am guessing local var S1 here is optimized because it is not used anywhere, so the value is not relvant anymore.
Try run this on a local machine, can you see S1?
I am not sure if it pertains, but I am aware of System.AnsiStrings containing specialized commands such as "Format", etc... Using something like the following may resolve your issue:
var
S1: AnsiString;
S2: UnicodeString;
begin
S1 := 'Foo';
S2 := 'Bar';
ShowMessage(Format('%s!', S2));
end;
Also there are a few open bugs, just to rule out any of those, what specific versions of the os and tools are you using i.e. Win7 x64 Ultimate etc.?