Adding properties into existing stabs/dwarf; gdb readable workaround ? [[Re: [fpc-devel] Status and ideas about debug info (stabs, dwarf / dwar3)]]

Martin lazarus at mfriebe.de
Mon Sep 12 14:07:52 CEST 2011


Anyone care to comment on those ideas?

Are they worth to be made a feature request?
And if so, which of the proposed ideas should be made into a feature 
request?

On 11/09/2011 23:15, Martin wrote:
>
> Like it was done for properties that directly map to a field. The now 
> are somehow encoded, so the field is read.
> BTW anyone, why is that dwarf only => could stabs not just define 
> another entry under the property name?
>
>
> Even then it would be a long way, because it would only be in fpc 
> 2.6.2 (if merged) or 2.8.0; before a lazarus release would benefit.
> On the other hand it would anyway take time for lazarus to be adapted 
> to use the info. And currently the info would have to be readable 
> through gdb, something I hope to change in future.
>
> More than that, Lazarus is not the only way to use the info, people 
> use other IDEs or gdb directly => all that needs to be considered.
>
> Also there are (at least to me) 2 levels.
> 1) Make available the info that a property exists, even if no way 
> exists to access it. (via gdb)
> 2) access to the data, or information about hpw to access (pointer to 
> getter/setter functions) (via gdb)
>
> The first would simply mean that something in the "ptype" result of a 
> class indicates the presence of a property
>
> Of course, if the property already maps (aliases) the field (if 
> directly mapped to field) then it is impossible for ptype to return a 
> different result, than the type of the field.
>
> And returning the content of the field is essential, especially if 
> fields themself are structured types (classes).
>      FooObject.BarObjFieldProperty.BarValue
> only works with the current "alias" solution.
> While an IDE could transform the expression, if really that was 
> needed, a user using gdb directly would relay on this working (and for 
> an IDE it is much easier and leads to better performance, if that is 
> working)
>
> That already defies the idea of encoding properties as structure 
> (actually differnet properties = diff structures) with a field for 
> getter and setter.
> The structure could have been identified as property by a none pascal 
> name (like the $fp framepointer in nested functions)
>
> The structure approach would have been nice, as it would have provided 
> the info about the property in place of the real property name.
> - It would have been fine if  FooObject.BarObjFieldProperty  would 
> return and display the whole structure. An IDE can deal with it, and a 
> gdb user can still read it (assuming that the structure displays all 
> it's values, rather than just an address)
> - But it would break FooObject.BarObjFieldProperty.BarValue  . Unless 
> the "." after the property can be tought to be an operator that uses 
> the "read-value" field (if it is a field)
>   (and similar for arras with [])
>
> I am not sure if something like this can be done (and reliable with 
> current gdb versions)
>
> ---
> Another approach, by far not as nice:
>
> - Leave the getter as is / maybe add getters with function to declare 
> the property to be the same as the read function.
> - And add another field PropertyName$Set with the setter info
>
> Accessing a property in value evaluation would work as it does now.
> An IDE getting a "ptype" could detect the xxx$Set entries, match the 
> getters, and know what is a property => even have a way of modifying 
> them, if it can do code-execution for that purpose...
>
> Alternative xxx$Property with a record (or xxx$Set / xxx$get), to 
> provide info about properties; but leave the actual name mapped to the 
> field (were appropriate) so the expression evaluation would still work




More information about the fpc-devel mailing list