Visual D structs/classes not showing in debugging (reprise)

Johnson Jones via Digitalmars-d-debugger digitalmars-d-debugger at puremagic.com
Sun Aug 6 10:03:56 PDT 2017


Rainer, could you explain to me again why structs and classes are 
not properly shown in the debugger?

The output is always of the form:


eb	{}	gtkc.gdktypes.GdkEventButton

or

e	0x02C4CCF0	gdk.Event.Event

and no fields are ever listed, which makes it extremely useless 
in debugging.

I feel that there really should be no reason it shouldn't be able 
to list them and if I can get visualD to compile I might try 
fixing this since it needs to be done. (debugging in Visual D is 
one of the worse debugging experience I have.. and these 
seemingly minor things are reason...)


If Visual D can't get the info at debug time because it doesn't 
exist(I imagine it does it exist but it's an offshoot of the 
quirkiness of dmd symbols or just a bug in Visual D) then we 
could use json to get the fields and at the very least, list 
them(after all it's still more informative than {} or an address).

Also, if I run it under the visual studio debugger I get

D0006: Error: Type resolve failed

for e. It seems that the issue is really just a bug in visual D 
or from it not implementing something the debugger needs.


If the debugger has the address and knows the structural layout 
it has no issues getting the values. (Although align and order 
may or may not be an issue)

So things should work, there really is no reason why they 
shouldn't except a little elbow grease.


If it is a problem ultimately with dmd, then there should be 
workarounds.


e.g., we could add some hidden functions in to the binary during 
compilation that the debugger could call to get these values.

e.g.,

string DebuggerGetStructValues_gdk_Event_Event(gdk.Event.Event* e)
{
    // extract values of e and put them in json format for 
debugger to use. Most of it is compile time work.
}

Then the debugger just has to call this function internally and 
the values will be put in the string which it can then report to 
the user.

or whatever. There are plenty of ways to build a bridge.




More information about the Digitalmars-d-debugger mailing list