[0.1.x] fixed : typedVar __str__ converter

git-svn-id: https://pykd.svn.codeplex.com/svn@74849 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2012-03-11 14:54:03 +00:00 committed by Mikhail I. Izmestev
parent 70d40017ac
commit 1a87bf5e64
6 changed files with 39 additions and 13 deletions

View File

@ -102,11 +102,12 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_loadSignDWords, DebugClient:
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_loadSignQWords, DebugClient::loadSignQWords, 2, 3 ); BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_loadSignQWords, DebugClient::loadSignQWords, 2, 3 );
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_compareMemory, DebugClient::compareMemory, 3, 4 ); BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_compareMemory, DebugClient::compareMemory, 3, 4 );
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_getLocals, DebugClient::getLocals, 0, 1 ); BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_getLocals, DebugClient::getLocals, 0, 1 );
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( pyDia_Symbol_findChildrenEx, pyDia::Symbol::findChildrenEx, 1, 3 );
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setSoftwareBp, DebugClient::setSoftwareBp, 1, 2 ); BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setSoftwareBp, DebugClient::setSoftwareBp, 1, 2 );
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setHardwareBp, DebugClient::setHardwareBp, 3, 4 ); BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setHardwareBp, DebugClient::setHardwareBp, 3, 4 );
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( StackFrame_getLocals, StackFrame::getLocals, 0, 1 ); BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( StackFrame_getLocals, StackFrame::getLocals, 0, 1 );
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( pyDia_Symbol_findChildrenEx, pyDia::Symbol::findChildrenEx, 1, 3 );
#define DEF_PY_CONST_ULONG(x) \ #define DEF_PY_CONST_ULONG(x) \
python::scope().attr(#x) = ULONG(##x) python::scope().attr(#x) = ULONG(##x)
@ -723,8 +724,8 @@ BOOST_PYTHON_MODULE( pykd )
"Retrieves the type of the target CPU: IMAGE_FILE_MACHINE_XXX") "Retrieves the type of the target CPU: IMAGE_FILE_MACHINE_XXX")
.def( "__str__", &pyDia::Symbol::print) .def( "__str__", &pyDia::Symbol::print)
.def("__getitem__", &pyDia::Symbol::getChildByName) .def("__getitem__", &pyDia::Symbol::getChildByName)
.def("__len__", &pyDia::Symbol::getChildCount ) .def("__len__", (ULONG (pyDia::Symbol::*)())&pyDia::Symbol::getChildCount )
.def("__getitem__", &pyDia::Symbol::getChildByIndex) .def("__getitem__", (pyDia::SymbolPtr(pyDia::Symbol::*)(ULONG) )&pyDia::Symbol::getChildByIndex)
.def("__eq__", &pyDia::Symbol::eq) .def("__eq__", &pyDia::Symbol::eq)
.def("__hash__", &pyDia::Symbol::getIndexId); .def("__hash__", &pyDia::Symbol::getIndexId);

View File

@ -316,12 +316,12 @@ SymbolPtr Symbol::getChildByName(const std::string &_name)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
ULONG Symbol::getChildCount() ULONG Symbol::getChildCount( ULONG symTag )
{ {
DiaEnumSymbolsPtr symbols; DiaEnumSymbolsPtr symbols;
HRESULT hres = HRESULT hres =
m_symbol->findChildren( m_symbol->findChildren(
SymTagNull, static_cast<enum SymTagEnum>(symTag),
NULL, NULL,
nsCaseSensitive, nsCaseSensitive,
&symbols); &symbols);
@ -338,12 +338,12 @@ ULONG Symbol::getChildCount()
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
SymbolPtr Symbol::getChildByIndex(ULONG _index) SymbolPtr Symbol::getChildByIndex(ULONG _index, ULONG symTag )
{ {
DiaEnumSymbolsPtr symbols; DiaEnumSymbolsPtr symbols;
HRESULT hres = HRESULT hres =
m_symbol->findChildren( m_symbol->findChildren(
SymTagNull, static_cast<enum SymTagEnum>(symTag),
NULL, NULL,
nsCaseSensitive, nsCaseSensitive,
&symbols); &symbols);

View File

@ -133,8 +133,10 @@ public:
} }
SymbolPtr getChildByName(const std::string &_name); SymbolPtr getChildByName(const std::string &_name);
ULONG getChildCount();
SymbolPtr getChildByIndex(ULONG _index); ULONG getChildCount( ULONG symTag = SymTagNull );
SymbolPtr getChildByIndex(ULONG _index, ULONG symTag = SymTagNull );
bool isConstant(); bool isConstant();

View File

@ -15,6 +15,7 @@ TypeInfoPtr TypeInfo::getTypeInfo( pyDia::SymbolPtr &typeSym )
return getBaseTypeInfo( typeSym ); return getBaseTypeInfo( typeSym );
case SymTagUDT: case SymTagUDT:
case SymTagBaseClass:
return TypeInfoPtr( new UdtTypeInfo( typeSym ) ); return TypeInfoPtr( new UdtTypeInfo( typeSym ) );
case SymTagArrayType: case SymTagArrayType:
@ -479,10 +480,10 @@ TypeInfoPtr UdtTypeInfo::getFieldByIndex( ULONG index )
std::string UdtTypeInfo::getFieldNameByIndex( ULONG index ) std::string UdtTypeInfo::getFieldNameByIndex( ULONG index )
{ {
if ( index >= m_dia->getChildCount() ) if ( index >= m_dia->getChildCount( SymTagData ) )
throw TypeException( m_dia->getName(), ": field not found" ); throw TypeException( m_dia->getName(), ": field not found" );
pyDia::SymbolPtr field = m_dia->getChildByIndex(index); pyDia::SymbolPtr field = m_dia->getChildByIndex(index, SymTagData);
if ( !field ) if ( !field )
throw TypeException( m_dia->getName(), ": field not found" ); throw TypeException( m_dia->getName(), ": field not found" );
@ -494,7 +495,7 @@ std::string UdtTypeInfo::getFieldNameByIndex( ULONG index )
ULONG UdtTypeInfo::getFieldCount() ULONG UdtTypeInfo::getFieldCount()
{ {
return m_dia->getChildCount(); return m_dia->getChildCount( SymTagData );
} }
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////

View File

@ -189,3 +189,25 @@ class TypedVarTest( unittest.TestCase ):
tv2 = target.module.typedVar( "structTest", tv1 ) tv2 = target.module.typedVar( "structTest", tv1 )
self.assertEqual( tv1, tv2 ) self.assertEqual( tv1, tv2 )
self.assertTrue( tv1 ) self.assertTrue( tv1 )
def testPrint(self):
self.assertTrue( str(target.module.typedVar( "g_ucharValue" ) ) )
self.assertTrue( str(target.module.typedVar( "g_ushortValue" ) ) )
self.assertTrue( str(target.module.typedVar( "g_ulongValue" ) ) )
self.assertTrue( str(target.module.typedVar( "g_ulonglongValue" ) ) )
self.assertTrue( str(target.module.typedVar( "g_structWithBits" ) ) )
self.assertTrue( str(target.module.typedVar( "g_structTest" ) ) )
self.assertTrue( str(target.module.typedVar( "g_structTest1" ) ) )
self.assertTrue( str(target.module.typedVar( "g_testArray" ) ) )
self.assertTrue( str(target.module.typedVar( "g_structTestPtr" ) ) )
self.assertTrue( str(target.module.typedVar( "g_structTestPtrPtr" ) ) )
self.assertTrue( str(target.module.typedVar( "longlongArray" ) ) )
self.assertTrue( str(target.module.typedVar( "intMatrix4" ) ) )
self.assertTrue( str(target.module.typedVar( "ptrIntMatrix" ) ) )
self.assertTrue( str(target.module.typedVar( "g_classChild" ) ) )
self.assertTrue( str(target.module.typedVar( "g_struct3" ) ) )
self.assertTrue( str(target.module.typedVar( "g_listHead" ) ) )
self.assertTrue( str(target.module.typedVar( "g_voidPtr" ) ) )
self.assertTrue( str(target.module.typedVar( "g_arrOfPtrToFunc" ) ) )
self.assertTrue( str(target.module.typedVar( "g_unTypedPtrToFunction" ) ) )

View File

@ -237,7 +237,7 @@ StructWithNested g_structWithNested;
StructWithNested::Nested g_structNested; StructWithNested::Nested g_structNested;
WNDENUMPROC g_ptrToFunction; WNDENUMPROC g_ptrToFunction;
void *g_unTypedPtrToFunction; void *g_unTypedPtrToFunction = g_ptrToFunction;
#pragma pack( pop ) #pragma pack( pop )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////