diff --git a/pykd/dia/diawrapper.cpp b/pykd/dia/diawrapper.cpp index 7ba5c82..f39fead 100644 --- a/pykd/dia/diawrapper.cpp +++ b/pykd/dia/diawrapper.cpp @@ -259,7 +259,7 @@ public: { } - HRESULT STDMETHODCALLTYPE load(__inout IDiaDataSource &dataSource) override + virtual HRESULT load(__inout IDiaDataSource &dataSource) override { CComPtr< IUnknown > readExeAtRVACallback(new ReadExeAtRVACallback(m_loadBase, m_openedSymbolFile) ); return diff --git a/pykd/module.cpp b/pykd/module.cpp index e1b4569..07375e7 100644 --- a/pykd/module.cpp +++ b/pykd/module.cpp @@ -44,17 +44,40 @@ Module::Module(ULONG64 offset ) SymbolSessionPtr& Module::getSymSession() { - m_symSession = loadSymbolFile(m_base, m_imageName, m_symfile); + if (m_symSession) + return m_symSession; - if ( !m_symSession ) + try { - m_symfile = getModuleSymbolFileName(m_base); - m_symSession = loadSymbolFile(m_symfile, m_base); + m_symSession = loadSymbolFile(m_base, m_imageName, m_symfile); + } + catch(const SymbolException &e) + { + DBG_UNREFERENCED_LOCAL_VARIABLE(e); + } + if (m_symSession) + return m_symSession; + + // TODO: read image file path and load using IDiaReadExeAtOffsetCallback + + m_symfile = getModuleSymbolFileName(m_base); + if (!m_symfile.empty()) + { + try + { + m_symSession = loadSymbolFile(m_symfile, m_base); + } + catch(const SymbolException &e) + { + DBG_UNREFERENCED_LOCAL_VARIABLE(e); + } if (m_symSession) - throw SymbolException( "failed to load symbol file" ); + return m_symSession; + + m_symfile.clear(); } - return m_symSession; + throw SymbolException( "failed to load symbol file" ); } /////////////////////////////////////////////////////////////////////////////////////