I know how refcount internally work on strings and dyn array.
I am thinking about formulating a request to the DWARF specs. So I want to check the details, and also get information how they
- will work for smart pointers,
- where else they may occur?
Background, refcounts may be of interest for the debugger in at least the following cases.
- A user modifies a variable (or an indexed value) via the debugger. ~ The debugger may additionally need info, if it should "copy on write" / though that can be derived....
~ The debugger could inform the user about "side effects on other references to the value"
- The user may want to explicitly see the refcount. ~ A user may have "pchar" access to a string, and the user wants to ensure the string was correctly "uniquestring" treated.
- A user wants to call a function that has a string/array as argument/result.
~ The debugger must deal with that, without introducing mem leaks.
If I am correct, then the following dwarf tags may need information
DW_TAG_Array (string and array)
DW_TAG_string_type
DW_TAG_structure // or class / interface => for smart pointers // other types? base type, e.g. a refcounted char or integer???
The last assumes that the info can be encoded to the "smart pointed to" structure?
- Are there non-structure values that could be affected?
- Should maybe the DW_TAG_Pointer hold the refcount info instead?
I would expect the ref-count to be in the target value? Unless you can have a non-ref-counted structure, but have a ref-counted pointer to it????
------------------
The "copy on write" can be known by checking if it is a string. That is, as long as smart pointers will not look like a string.
The debugger likely will need some knowledge on the producer (and then such type based decisions can be allowed)>
This is because the debugger must also know how to call fpc_ansistring_decref etc...
And trying to encode what functions to call (including where to pass which data as parameter =>probably way to complex)
So my current idea is to request a simple
DW_AT_refcount // location, reference, constant // maybe flag maybe
DW_AT_refcount_size / bit_size
(And maybe similar for the encoding field... any idea on what other fields may be of interest, or any that are going to be added soon-ish?)
------------------
I am not sure yet which methods the debugger may have to call on smart pointers, or what else it would need to know.
Any feedback on that part would be welcome
