 <p>Afaik the field tables in classic delphi and FPC only work for published fields. Published fields must be class fields (value types like integer must go via properties). Newer Delphi's also allow RTTI for non published fields, but that works differently (different untis), and FPC doesn't support that yet.</p> <p>I hacked together a small demonstration example since the help for typinfo seems to be light on examples. Note the tpersistent derivation.</p> <pre><code>{$mode delphi} uses typinfo,classes; type TAClass=class(Tpersistent) a: tstringlist; b: tlist; end; var ovmt: PVmt; FieldTable: PVMTFieldTable; PVMTFieldEntry; i: longint; begin ovmt := PVmt(TAClass); while ovmt &lt;&gt; nil do begin FieldTable := PVMTFieldTable(ovmt^.vFieldTable); if FieldTable &lt;&gt; nil then begin FieldInfo := @FieldTable^.Fields[0]; for i := 0 to FieldTable^.Count - 1 do begin writeln(fieldinfo^.name); FieldInfo := PvmtFieldEntry(PByte(@FieldInfo^.Name) + 1 + Length(FieldInfo^.Name)); end; end; { Try again with the parent class type } ovmt:=ovmt^.vParent; end; </code></pre> <p>end.</p>