[fpc-devel] Archer and Dwarf-3

Joost van der Sluis joost at cnoc.nl
Wed May 20 23:26:50 CEST 2009

Hi all,

I've switched back to Linux/Fedora 11 to continue testing Dwarf-3 and
Archer further. (Because that's my natural habitat, Windows just slows
me down - especially using GIT)

So I'm on the 'official' fedora-archer-gdb version now, and recent

I have a few remarks:

Case sensitivity

The name of dynamic arrays are case-sensitive, while the names of
'normal' arrays aren't case-sensitive. When you look at the code of
dbgdwarf this makes sense, since for 'normal' arrays the dwarf-2 code is
called, while for dwarf-3 some other code is executed. So it could be
that the dwarf-3 code is case sensitive, but I can't see why. Besides,
using objdump -w, I see no difference between the defined name of a
dynamic array and a normal array. So why does gdb handles them

When dwarf-2 is used, all names are stored in capitals into the
debug-information. For dwarf-3 they are stored as how ther are defined
in the sources. Is that something new in dwarf-3? That you can supply
the casing as it is in the source, but that they still can be handled

Printing arrays

Printing the contents of an array doesn't work (print arrr). They are
showed as a pchar, but using 'whatis arr' then the type is correctly
given. Except that the size of dynamic arrays is bogus. (way too large)

Using 'print[x]' works fine on arrays of shortint, though. But it fails
on arrays of ansistrings. It always prints the value of the first
member. I would say that this is a gdb bug, and not the debug-info. But
that's just a guess.

Outside an array, ansistrings work fine!


ps, code I used:

program debugtest;

{$mode objfpc}{$h+}

uses sysutils;

var DArr : Array of integer; // case sensitive
    Arr : Array[0..9] of integer; // case insensitive
    SArr : array[0..9] of string; // case insensitive
    SDArr : Array of string; // case sensitive
    s   : String; // case sensitive
    i   : integer; // case sensitive

  s := 'Test'#0'String';
  for i := 0 to 9 do
    Arr[i] := i;
    DArr[i] := i+100; 
    SArr[i] := 'str'+inttostr(i);
    SDArr[i] := 'str'+inttostr(i+100);
  writeln(s); // I've placed a breakpoint here and printed the var.
  for i := 0 to 9 do 
  for i := 0 to 9 do 

More information about the fpc-devel mailing list