mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 12:53:23 +08:00
[0.1.x] workaround : #issue 10767 ( typeInfo raises symbolException for classes with diamond virtual inheritance ) - base virtual classes are ignored
git-svn-id: https://pykd.svn.codeplex.com/svn@76401 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
1fb0cb9e6c
commit
17f8fb721e
@ -170,6 +170,13 @@ ULONG Symbol::getCount()
|
||||
return callSymbol(get_count);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int Symbol::getVirtualBasePointerOffset()
|
||||
{
|
||||
return callSymbol( get_virtualBasePointerOffset);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Symbol::getValueImpl(IDiaSymbol *_symbol, VARIANT &vtValue)
|
||||
{
|
||||
@ -241,6 +248,20 @@ bool Symbol::isBasicType()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool Symbol::isVirtualBaseClass()
|
||||
{
|
||||
return !!callSymbol(get_virtualBaseClass);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool Symbol::isIndirectVirtualBaseClass()
|
||||
{
|
||||
return !!callSymbol(get_indirectVirtualBaseClass);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ULONG Symbol::getBaseType()
|
||||
{
|
||||
return callSymbol(get_baseType);
|
||||
|
@ -117,6 +117,10 @@ public:
|
||||
|
||||
bool isBasicType();
|
||||
|
||||
bool isVirtualBaseClass();
|
||||
|
||||
bool isIndirectVirtualBaseClass();
|
||||
|
||||
ULONG getBaseType();
|
||||
|
||||
ULONG getBitPosition();
|
||||
@ -155,6 +159,8 @@ public:
|
||||
|
||||
bool eq(Symbol &rhs);
|
||||
|
||||
int getVirtualBasePointerOffset();
|
||||
|
||||
public:
|
||||
typedef std::pair<ULONG, const char *> ValueNameEntry;
|
||||
|
||||
|
@ -533,9 +533,12 @@ void UdtTypeInfo::getFields( pyDia::SymbolPtr &rootSym, ULONG startOffset )
|
||||
ULONG symTag = childSym->getSymTag();
|
||||
|
||||
if ( symTag == SymTagBaseClass )
|
||||
{
|
||||
if ( !childSym->isVirtualBaseClass() )
|
||||
{
|
||||
getFields( childSym, startOffset + childSym->getOffset() );
|
||||
}
|
||||
}
|
||||
else
|
||||
if ( symTag == SymTagData )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user