From 1afb67fd2ead5a1b9716cf952ca409ef675b944d Mon Sep 17 00:00:00 2001 From: "SND\\EreTIk_cp" Date: Wed, 26 Jan 2011 14:52:55 +0000 Subject: [PATCH] [!] fix:#8229 loadModuel("some_drv") - out message "IDebugSymbol::Reload failed" git-svn-id: https://pykd.svn.codeplex.com/svn@60723 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/dbgmodule.cpp | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/pykd/dbgmodule.cpp b/pykd/dbgmodule.cpp index fc89f73..3ef77ec 100644 --- a/pykd/dbgmodule.cpp +++ b/pykd/dbgmodule.cpp @@ -5,6 +5,7 @@ #include "dbgexcept.h" #include "dbgmem.h" #include "dbgsym.h" +#include "dbgcallback.h" ///////////////////////////////////////////////////////////////////////////////// @@ -148,13 +149,42 @@ dbgModuleClass::reloadSymbols() HRESULT hres; try { - - std::string reloadParam = "/f "; //"/f /s "; + static const char *szReloadParam = "/f "; //"/f /s "; + std::string reloadParam = szReloadParam; reloadParam += m_name; - hres = dbgExt->symbols->Reload( reloadParam.c_str() ); - + + { + // try reload module by entered name, "silent mode" + OutputReader outputReader( dbgExt->client ); + hres = dbgExt->symbols->Reload( reloadParam.c_str() ); + } if ( FAILED( hres ) ) - throw DbgException( "IDebugSymbol::Reload failed" ); + { + // failed => try reload symbols by image file name + char szImageName[MAX_PATH/2]; + HRESULT hres2 = dbgExt->symbols2->GetModuleNameString( + DEBUG_MODNAME_IMAGE, + DEBUG_ANY_ID, + m_base, + szImageName, + _countof(szImageName), + NULL); + if (SUCCEEDED(hres2)) + { + PCSTR szImageFileName = strrchr(szImageName, '\\'); + if (!szImageFileName) + szImageFileName = szImageName; + else + ++szImageFileName; + + reloadParam = szReloadParam; + reloadParam += szImageFileName; + hres = dbgExt->symbols->Reload( reloadParam.c_str() ); + } + } + + if ( FAILED( hres ) ) + throw DbgException( "IDebugSymbol::Reload failed" ); } catch( std::exception &e ) {