[0.1.x] fixed : issue #10627 ( print typeInfo() output insufficient information )

git-svn-id: https://pykd.svn.codeplex.com/svn@75403 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2012-04-10 06:35:39 +00:00 committed by Mikhail I. Izmestev
parent 1d0963832e
commit fba83511b0
2 changed files with 51 additions and 0 deletions

View File

@ -1,5 +1,7 @@
#include "stdafx.h" #include "stdafx.h"
#include <iomanip>
#include "typeinfo.h" #include "typeinfo.h"
#include "dbgclient.h" #include "dbgclient.h"
@ -536,6 +538,29 @@ ULONG UdtTypeInfo::getFieldCount()
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
std::string UdtTypeInfo::print()
{
std::stringstream sstr;
sstr << "struct/class: " << getName() << "Size: 0x" << std::hex << getSize() << " (" << std::dec << getSize() << ")" << std::endl;
ULONG fieldCount = getFieldCount();
for ( ULONG i = 0; i < fieldCount; ++i )
{
TypeInfoPtr fieldType = getFieldByIndex(i);
sstr << " +" << std::right << std::setw(4) << std::setfill('0') << std::hex << fieldType->getOffset();
sstr << " " << std::left << std::setw( 20 ) << std::setfill(' ') << getFieldNameByIndex(i) << ':';
sstr << " " << std::left << fieldType->getName();
sstr << std::endl;
}
return sstr.str();
}
/////////////////////////////////////////////////////////////////////////////////////
bool bool
UdtTypeInfo::getBaseField( UdtTypeInfo::getBaseField(
pyDia::SymbolPtr symUdt, pyDia::SymbolPtr symUdt,
@ -652,6 +677,28 @@ python::dict EnumTypeInfo::asMap()
return dct; return dct;
} }
/////////////////////////////////////////////////////////////////////////////////////
std::string EnumTypeInfo::print()
{
std::stringstream sstr;
sstr << "enum: " << getName() << std::endl;
pyDia::SymbolPtrList symbolsList = m_dia->findChildrenImpl(SymTagData, "", nsfCaseSensitive );
for ( pyDia::SymbolPtrList::iterator it = symbolsList.begin(); it != symbolsList.end(); it++ )
{
CComVariant val;
(*it)->getValue( val );
sstr << " " << (*it)->getName();
sstr << " = " << std::hex << val.ulVal << " (" << std::dec << val.ulVal << ')';
sstr << std::endl;
}
return sstr.str();
}
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////

View File

@ -242,6 +242,8 @@ protected:
return true; return true;
} }
virtual std::string print();
static bool getBaseField( static bool getBaseField(
pyDia::SymbolPtr symUdt, pyDia::SymbolPtr symUdt,
const std::string &fieldName, const std::string &fieldName,
@ -287,6 +289,8 @@ protected:
return true; return true;
} }
virtual std::string print();
pyDia::SymbolPtr m_dia; pyDia::SymbolPtr m_dia;
}; };