diff --git a/pykd/typedvar.cpp b/pykd/typedvar.cpp index 4275574..fe059ea 100644 --- a/pykd/typedvar.cpp +++ b/pykd/typedvar.cpp @@ -10,8 +10,11 @@ namespace pykd { /////////////////////////////////////////////////////////////////////////////////// -TypedVarPtr TypedVar::getTypedVar( const TypeInfoPtr& typeInfo, VarDataPtr varData ) +TypedVarPtr TypedVar::getTypedVar( const TypeInfoPtr& typeInfo, VarDataPtr varData ) { + if ( !typeInfo ) + throw DbgException( "typeInfo can not be None" ); + TypedVarPtr tv; if ( typeInfo->isBasicType() ) @@ -546,6 +549,9 @@ TypedVarPtr containingRecordByName( ULONG64 offset, const std::string &typeName, TypedVarPtr containingRecordByType( ULONG64 addr, const TypeInfoPtr &typeInfo, const std::string &fieldName ) { + if ( !typeInfo ) + throw DbgException( "typeInfo can not be None" ); + addr = addr64(addr); VarDataPtr varData = VarDataMemory::factory( addr - typeInfo->getFieldOffsetByNameRecursive(fieldName) ); @@ -571,6 +577,9 @@ python::list getTypedVarListByTypeName( ULONG64 listHeadAddress, const std::stri python::list getTypedVarListByType( ULONG64 listHeadAddress, const TypeInfoPtr &typeInfo, const std::string &listEntryName ) { + if ( !typeInfo ) + throw DbgException( "typeInfo can not be None" ); + python::list lst; listHeadAddress = addr64( listHeadAddress ); @@ -613,6 +622,9 @@ python::list getTypedVarArrayByTypeName( ULONG64 addr, const std::string &typeN python::list getTypedVarArrayByType( ULONG64 offset, const TypeInfoPtr &typeInfo, ULONG number ) { + if ( !typeInfo ) + throw DbgException( "typeInfo can not be None" ); + offset = addr64(offset); python::list lst; diff --git a/test/scripts/memtest.py b/test/scripts/memtest.py index e221b0e..08a14b0 100644 --- a/test/scripts/memtest.py +++ b/test/scripts/memtest.py @@ -119,6 +119,5 @@ class MemoryTest( unittest.TestCase ): def testLoadDoubles(self): testArray = [ 1.0, 2.0000001, -3.0000004 ]; readArray = pykd.loadDoubles( target.module.doubleArray, 3 ); - print readArray for i in range(0,3): self.assertTrue( math.fabs( testArray[i] - readArray[i] ) < 0.0000001 ) diff --git a/test/scripts/pykdtest.py b/test/scripts/pykdtest.py index d466116..196a7d5 100644 --- a/test/scripts/pykdtest.py +++ b/test/scripts/pykdtest.py @@ -45,13 +45,13 @@ def getTestSuite( singleName = "" ): unittest.TestLoader().loadTestsFromTestCase( moduletest.ModuleTest ), unittest.TestLoader().loadTestsFromTestCase( memtest.MemoryTest ), unittest.TestLoader().loadTestsFromTestCase( typeinfo.TypeInfoTest ), - #unittest.TestLoader().loadTestsFromTestCase( typedvar.TypedVarTest ), + unittest.TestLoader().loadTestsFromTestCase( typedvar.TypedVarTest ), unittest.TestLoader().loadTestsFromTestCase( regtest.CpuRegTest ), unittest.TestLoader().loadTestsFromTestCase( customtypestest.CustomTypesTest ), # ^^^ unittest.TestLoader().loadTestsFromTestCase( TerminateProcessTest ), - #unittest.TestLoader().loadTestsFromTestCase( localstest.LocalVarsTest ), + unittest.TestLoader().loadTestsFromTestCase( localstest.LocalVarsTest ), unittest.TestLoader().loadTestsFromTestCase( ehexcepttest.EhExceptionTest ), ] ) else: @@ -71,3 +71,7 @@ if __name__ == "__main__": #print "Test module: %s" % target.appPath unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() ) + #unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite("typedvar.TypedVarTest.testAmbiguousFieldAccess") ) + + raw_input(">") +# \ No newline at end of file diff --git a/test/scripts/typedvar.py b/test/scripts/typedvar.py index 6b0db3f..aff7278 100644 --- a/test/scripts/typedvar.py +++ b/test/scripts/typedvar.py @@ -20,7 +20,7 @@ class TypedVarTest( unittest.TestCase ): tv = pykd.typedVar( "g_structTest" ) tv = pykd.typedVar( target.moduleName + "!g_structTest" ) - + def testBaseTypes(self): self.assertEqual( 1, target.module.typedVar( "g_ucharValue" ) ) self.assertEqual( 2, target.module.typedVar( "g_ushortValue" ) ) @@ -311,5 +311,8 @@ class TypedVarTest( unittest.TestCase ): lst.append(entry) entry = entry.deref().Flink - - + def testWrongArgs(self): + self.assertRaises( pykd.BaseException, pykd.typedVar, None, 0 ) + self.assertRaises( pykd.BaseException, pykd.typedVarList, target.module.g_listHead1, None, "next" ) + self.assertRaises( pykd.BaseException, pykd.typedVarArray, target.module.g_testArray, None, 2 ) + self.assertRaises( pykd.BaseException, pykd.containingRecord, target.module.offset( "g_structTest" ), None, "m_field2" )