[Issue 18846] New: VisualD - show vtable in debugger
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed May 9 21:32:44 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=18846
Issue ID: 18846
Summary: VisualD - show vtable in debugger
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P1
Component: visuald
Assignee: nobody at puremagic.com
Reporter: turkeyman at gmail.com
Compile and debug this code (using Mago):
-----------------------------------
C++:
----
#include <stdio.h>
class Something
{
public:
virtual void x();
int data = 10;
};
void Something::x()
{
printf("X");
}
void dfunc(Something*);
void main()
{
Something s;
dfunc(&s);
}
-----------------------------------
D:
--
extern(C++) class Something
{
abstract void x();
int data;
}
extern(C++) void dfunc(Something s)
{
s.x();
}
-----------------------------------
Put a breakpoint in dfunc().
If you inspect 's' in C++, you will see "__vfptr ..." and "data = 10"
If you inspect 's' from D, you will only see "data = 10"
In C++, __vfptr is an array of "void*" that you can open and see a list of all
the virtual functions.
I really want to be able to see __vfptr from D's debuginfo too. At very least,
it will help to debug mis-alignments between C++ and extern(C++) vtables.
It's very easy to create a vtable mismatch from D.
If the debuginfo doesn't want to emit this member (it should), then I think it
might also be possible to fabricate its appearance with the natvis?
--
More information about the Digitalmars-d-bugs
mailing list