mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-29 11:53:23 +08:00
[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:
parent
70d40017ac
commit
1a87bf5e64
@ -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_compareMemory, DebugClient::compareMemory, 3, 4 );
|
||||
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_setHardwareBp, DebugClient::setHardwareBp, 3, 4 );
|
||||
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) \
|
||||
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")
|
||||
.def( "__str__", &pyDia::Symbol::print)
|
||||
.def("__getitem__", &pyDia::Symbol::getChildByName)
|
||||
.def("__len__", &pyDia::Symbol::getChildCount )
|
||||
.def("__getitem__", &pyDia::Symbol::getChildByIndex)
|
||||
.def("__len__", (ULONG (pyDia::Symbol::*)())&pyDia::Symbol::getChildCount )
|
||||
.def("__getitem__", (pyDia::SymbolPtr(pyDia::Symbol::*)(ULONG) )&pyDia::Symbol::getChildByIndex)
|
||||
.def("__eq__", &pyDia::Symbol::eq)
|
||||
.def("__hash__", &pyDia::Symbol::getIndexId);
|
||||
|
||||
|
@ -316,12 +316,12 @@ SymbolPtr Symbol::getChildByName(const std::string &_name)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ULONG Symbol::getChildCount()
|
||||
ULONG Symbol::getChildCount( ULONG symTag )
|
||||
{
|
||||
DiaEnumSymbolsPtr symbols;
|
||||
HRESULT hres =
|
||||
m_symbol->findChildren(
|
||||
SymTagNull,
|
||||
static_cast<enum SymTagEnum>(symTag),
|
||||
NULL,
|
||||
nsCaseSensitive,
|
||||
&symbols);
|
||||
@ -338,12 +338,12 @@ ULONG Symbol::getChildCount()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SymbolPtr Symbol::getChildByIndex(ULONG _index)
|
||||
SymbolPtr Symbol::getChildByIndex(ULONG _index, ULONG symTag )
|
||||
{
|
||||
DiaEnumSymbolsPtr symbols;
|
||||
HRESULT hres =
|
||||
m_symbol->findChildren(
|
||||
SymTagNull,
|
||||
static_cast<enum SymTagEnum>(symTag),
|
||||
NULL,
|
||||
nsCaseSensitive,
|
||||
&symbols);
|
||||
|
@ -133,8 +133,10 @@ public:
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
|
@ -15,6 +15,7 @@ TypeInfoPtr TypeInfo::getTypeInfo( pyDia::SymbolPtr &typeSym )
|
||||
return getBaseTypeInfo( typeSym );
|
||||
|
||||
case SymTagUDT:
|
||||
case SymTagBaseClass:
|
||||
return TypeInfoPtr( new UdtTypeInfo( typeSym ) );
|
||||
|
||||
case SymTagArrayType:
|
||||
@ -479,10 +480,10 @@ TypeInfoPtr UdtTypeInfo::getFieldByIndex( 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" );
|
||||
|
||||
pyDia::SymbolPtr field = m_dia->getChildByIndex(index);
|
||||
pyDia::SymbolPtr field = m_dia->getChildByIndex(index, SymTagData);
|
||||
|
||||
if ( !field )
|
||||
throw TypeException( m_dia->getName(), ": field not found" );
|
||||
@ -494,7 +495,7 @@ std::string UdtTypeInfo::getFieldNameByIndex( ULONG index )
|
||||
|
||||
ULONG UdtTypeInfo::getFieldCount()
|
||||
{
|
||||
return m_dia->getChildCount();
|
||||
return m_dia->getChildCount( SymTagData );
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -189,3 +189,25 @@ class TypedVarTest( unittest.TestCase ):
|
||||
tv2 = target.module.typedVar( "structTest", tv1 )
|
||||
self.assertEqual( tv1, tv2 )
|
||||
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" ) ) )
|
||||
|
@ -237,7 +237,7 @@ StructWithNested g_structWithNested;
|
||||
StructWithNested::Nested g_structNested;
|
||||
|
||||
WNDENUMPROC g_ptrToFunction;
|
||||
void *g_unTypedPtrToFunction;
|
||||
void *g_unTypedPtrToFunction = g_ptrToFunction;
|
||||
#pragma pack( pop )
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user