diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 7891ec2..48154ec 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -549,6 +549,10 @@ BOOST_PYTHON_MODULE( pykd ) python::def( "setImplicitThread", pykd::setImplicitThread, "Set implicit thread" ); + // modules + python::def( "getModulesList", pykd::getModuleList, + "Return list of modules for the current target" ); + // events python::def("getLastEvent", pykd::getLastEvent, "Get last debug event information"); diff --git a/pykd/pymodule.cpp b/pykd/pymodule.cpp index d6ce49e..1965f6b 100644 --- a/pykd/pymodule.cpp +++ b/pykd/pymodule.cpp @@ -6,6 +6,22 @@ namespace pykd { /////////////////////////////////////////////////////////////////////////////// +python::list getModuleList() +{ + std::vector moduleLst; + + do { + AutoRestorePyState pystate; + for ( unsigned long i = 0; i < kdlib::getNumberModules(); ++i) + moduleLst.push_back( kdlib::loadModule(kdlib::getModuleOffsetByIndex(i) ) ); + + } while(false); + + return vectorToList(moduleLst); +} + +/////////////////////////////////////////////////////////////////////////////// + FixedFileInfoPtr ModuleAdapter::getFixedFileInfo( kdlib::Module& module ) { AutoRestorePyState pystate; @@ -155,4 +171,5 @@ python::list ModuleAdapter::getTypedVarArrayByTypeName( kdlib::Module& module, k /////////////////////////////////////////////////////////////////////////////// + } // namespace pykd diff --git a/pykd/pymodule.h b/pykd/pymodule.h index b4277c8..ab5bc61 100644 --- a/pykd/pymodule.h +++ b/pykd/pymodule.h @@ -16,6 +16,8 @@ namespace pykd { typedef boost::shared_ptr< kdlib::FixedFileInfo > FixedFileInfoPtr; +python::list getModuleList(); + struct ModuleAdapter : public kdlib::Module { diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py index 738ad74..f2d7b8f 100644 --- a/test/scripts/moduletest.py +++ b/test/scripts/moduletest.py @@ -1,4 +1,4 @@ -# +# # # @@ -136,4 +136,7 @@ class ModuleTest( unittest.TestCase ): self.assertFalse(target.module==None) self.assertTrue(target.module!=None) + def testModuleList(self): + self.assertTrue( [] != pykd.getModulesList() ) +