[Lazarus] To be a string or not to be a string (bitness independent?) [[[Re: Debugging the unicode RTL]]]

Martin Frb lazarus at mfriebe.de
Sun Jan 22 12:58:23 CET 2023

On 22/01/2023 11:24, Martin Frb via lazarus wrote:
> Though this relies on being able to detect
>    PChar  <>  String  <>  array of char
> which is a PITA.

   FPC 3.3.1 (but IIRC also 3.2.x)
   tested on Win, but similar on other OS

   s1: AnsiString;
   s2: array of char;

Both are encoded as

The name is not relevant, since the user could have done "type Foo = 
type AnsiString"

The debugger can only make the difference by looking at "current 
implementation in fpc"

For an array, FPC adds
- a stride
- a type for the subrange.

Both are not guaranteed, and could change any day.

If they do, a string may suddenly be shown as
   s1:   ('H','e','l','l','o',' ','W','o','r','l','d')

With DWARF-2  string are using the same dwarf as "PChar" (independent of 
its new name).

So for the watch "s1[2]" you get the value
PChar 'l'; String 'e'

Because the debugger simply can't tell if the index is 1 or 0 based.

More information about the lazarus mailing list