[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
This commit is contained in:
SND\kernelnet_cp 2016-09-15 10:49:08 +00:00 committed by Mikhail I. Izmestev
parent c2a15c2769
commit 7b3710b487
2 changed files with 51 additions and 38 deletions

View File

@ -3,7 +3,7 @@
#define PYKDEXT_VERSION_MAJOR 2 #define PYKDEXT_VERSION_MAJOR 2
#define PYKDEXT_VERSION_MINOR 0 #define PYKDEXT_VERSION_MINOR 0
#define PYKDEXT_VERSION_SUBVERSION 0 #define PYKDEXT_VERSION_SUBVERSION 0
#define PYKDEXT_VERSION_BUILDNO 4 #define PYKDEXT_VERSION_BUILDNO 5
#define __VER_STR2__(x) #x #define __VER_STR2__(x) #x
#define __VER_STR1__(x) __VER_STR2__(x) #define __VER_STR1__(x) __VER_STR2__(x)

View File

@ -133,52 +133,65 @@ info(
PCSTR args PCSTR args
) )
{ {
std::stringstream sstr; try
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)
{ {
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) for (const InterpreterDesc& desc : interpreterList)
sstr << "* "; {
else if ( defaultMajor == desc.majorVersion && defaultMinor == desc.minorVersion)
sstr << " "; 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; return S_OK;
} }