From 7b3710b487974d4eaf6ae9951efd904a82bd8672 Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" <SND\kernelnet_cp@9b283d60-5439-405e-af05-b73fd8c4d996> Date: Thu, 15 Sep 2016 10:49:08 +0000 Subject: [PATCH] [pykd_ext_2.0] fixed : issue #13983 ( !pykd.info throws unhandled exception ) git-svn-id: https://pykd.svn.codeplex.com/svn@91044 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd_ext/version.h | 2 +- pykd_ext/windbgext.cpp | 87 ++++++++++++++++++++++++------------------ 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/pykd_ext/version.h b/pykd_ext/version.h index 18bf1c9..a1805fa 100644 --- a/pykd_ext/version.h +++ b/pykd_ext/version.h @@ -3,7 +3,7 @@ #define PYKDEXT_VERSION_MAJOR 2 #define PYKDEXT_VERSION_MINOR 0 #define PYKDEXT_VERSION_SUBVERSION 0 -#define PYKDEXT_VERSION_BUILDNO 4 +#define PYKDEXT_VERSION_BUILDNO 5 #define __VER_STR2__(x) #x #define __VER_STR1__(x) __VER_STR2__(x) diff --git a/pykd_ext/windbgext.cpp b/pykd_ext/windbgext.cpp index 31dcba7..d404778 100644 --- a/pykd_ext/windbgext.cpp +++ b/pykd_ext/windbgext.cpp @@ -133,52 +133,65 @@ info( PCSTR args ) { - std::stringstream sstr; - - sstr <<std::endl << "pykd bootstrapper version: " << PYKDEXT_VERSION_MAJOR << '.' << PYKDEXT_VERSION_MINOR << '.' - << PYKDEXT_VERSION_SUBVERSION << '.' << PYKDEXT_VERSION_BUILDNO << std::endl; - - std::list<InterpreterDesc> interpreterList = getInstalledInterpreter(); - - int defaultMajor; - int defaultMinor; - - getDefaultPythonVersion(defaultMajor, defaultMinor); - - sstr << std::endl << "Installed python:" << std::endl << std::endl; - sstr << std::setw(16) << std::left << "Version:" << std::setw(12) << std::left << "Status: " << std::left << "Image:" << std::endl; - sstr << "------------------------------------------------------------------------------" << std::endl; - if (interpreterList.size() > 0) + try { - for (const InterpreterDesc& desc : interpreterList) + std::stringstream sstr; + + sstr <<std::endl << "pykd bootstrapper version: " << PYKDEXT_VERSION_MAJOR << '.' << PYKDEXT_VERSION_MINOR << '.' + << PYKDEXT_VERSION_SUBVERSION << '.' << PYKDEXT_VERSION_BUILDNO << std::endl; + + std::list<InterpreterDesc> interpreterList = getInstalledInterpreter(); + + int defaultMajor; + int defaultMinor; + + getDefaultPythonVersion(defaultMajor, defaultMinor); + + sstr << std::endl << "Installed python:" << std::endl << std::endl; + sstr << std::setw(16) << std::left << "Version:" << std::setw(12) << std::left << "Status: " << std::left << "Image:" << std::endl; + sstr << "------------------------------------------------------------------------------" << std::endl; + if (interpreterList.size() > 0) { - if ( defaultMajor == desc.majorVersion && defaultMinor == desc.minorVersion) - sstr << "* "; - else - sstr << " "; + for (const InterpreterDesc& desc : interpreterList) + { + if ( defaultMajor == desc.majorVersion && defaultMinor == desc.minorVersion) + sstr << "* "; + else + sstr << " "; - sstr << std::setw(14) << std::left << make_version(desc.majorVersion, desc.minorVersion); + sstr << std::setw(14) << std::left << make_version(desc.majorVersion, desc.minorVersion); - sstr << std::setw(12) << std::left << (isInterpreterLoaded(desc.majorVersion, desc.minorVersion) ? "Loaded" : "Unloaded"); + sstr << std::setw(12) << std::left << (isInterpreterLoaded(desc.majorVersion, desc.minorVersion) ? "Loaded" : "Unloaded"); - sstr << desc.imagePath << std::endl; + sstr << desc.imagePath << std::endl; + } } - } - else + else + { + sstr << "No python interpreter found" << std::endl; + } + + sstr << std::endl; + + CComQIPtr<IDebugControl> control = client; + + control->ControlledOutput( + DEBUG_OUTCTL_THIS_CLIENT, + DEBUG_OUTPUT_NORMAL, + sstr.str().c_str() + ); + } + catch(std::exception &e) { - sstr << "No python interpreter found" << std::endl; + CComQIPtr<IDebugControl> control = client; + + control->ControlledOutput( + DEBUG_OUTCTL_THIS_CLIENT, + DEBUG_OUTPUT_ERROR, + e.what() + ); } - sstr << std::endl; - - CComQIPtr<IDebugControl> control = client; - - control->ControlledOutput( - DEBUG_OUTCTL_THIS_CLIENT, - DEBUG_OUTPUT_NORMAL, - sstr.str().c_str() - ); - return S_OK; }