diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 9e6aad6..712541a 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -916,6 +916,7 @@ BOOST_PYTHON_MODULE( pykd ) .def("__init__", python::make_constructor(pykd::getTypedVarByName) ) .def("__init__", python::make_constructor(pykd::getTypedVarByTypeName) ) .def("__init__", python::make_constructor(pykd::getTypedVarByTypeInfo) ) + .def("__init__", python::make_constructor(pykd::getTypedVarWithPrototype) ) .def("getLocation", TypedVarAdapter::getLocation, "Return location of the varibale") .def("getAddress", TypedVarAdapter::getAddress, diff --git a/pykd/pytypedvar.h b/pykd/pytypedvar.h index c444342..301e3f9 100644 --- a/pykd/pytypedvar.h +++ b/pykd/pytypedvar.h @@ -32,6 +32,12 @@ inline kdlib::TypedVarPtr getTypedVarByTypeInfo( const kdlib::TypeInfoPtr &type return kdlib::loadTypedVar( typeInfo, addr ); } +inline kdlib::TypedVarPtr getTypedVarWithPrototype( const std::wstring &name, const std::wstring &prototype) +{ + AutoRestorePyState pystate; + return kdlib::loadTypedVar(name, prototype); +} + python::list getTypedVarListByTypeName( kdlib::MEMOFFSET_64 offset, const std::wstring &typeName, const std::wstring &fieldName ); python::list getTypedVarListByType( kdlib::MEMOFFSET_64 offset, kdlib::TypeInfoPtr &typeInfo, const std::wstring &fieldName ); python::list getTypedVarArrayByTypeName( kdlib::MEMOFFSET_64 offset, const std::wstring &typeName, size_t number ); diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py index f2d7b8f..f8ce2ab 100644 --- a/test/scripts/moduletest.py +++ b/test/scripts/moduletest.py @@ -86,7 +86,7 @@ class ModuleTest( unittest.TestCase ): fileName = pykd.getSourceFile(target.module.CdeclFunc ) self.assertTrue( re.search('testfunc\\.cpp', fileName ) ) fileName, lineNo, displacement = pykd.getSourceLine( target.module.CdeclFunc + 2) - self.assertEqual( 18, lineNo ) + self.assertEqual( 27, lineNo ) self.assertTrue( re.search('testfunc\\.cpp', fileName ) ) self.assertEqual( 2, displacement ) #fileName, lineNo, displacement = pykd.getSourceLine()