[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.

Example:
   FPC 3.3.1 (but IIRC also 3.2.x)
   tested on Win, but similar on other OS
   dwarf-3

var
   s1: AnsiString;
   s2: array of char;


Both are encoded as
     DW_TAG_array_type

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