Skip loading symbols for System.* dlls
authorIgor Kulaychuk <i.kulaychuk@samsung.com>
Mon, 17 Jul 2017 18:45:58 +0000 (21:45 +0300)
committerIgor Kulaychuk <i.kulaychuk@samsung.com>
Mon, 13 Nov 2017 19:22:40 +0000 (22:22 +0300)
src/debug/netcoredbg/modules.cpp

index 10e6be14c42cc0c35f1f187d8cf475b46043363f..2464d9cd19c15b460daa29128769af47601962c4 100644 (file)
@@ -244,6 +244,20 @@ HRESULT GetModuleId(ICorDebugModule *pModule, std::string &id)
     return S_OK;
 }
 
+static std::string GetFileName(const std::string &path)
+{
+    std::size_t i = path.find_last_of("/\\");
+    return i == std::string::npos ? path : path.substr(i + 1);
+}
+
+static bool ShouldLoadSymbolsFor(const std::string &moduleName)
+{
+    std::string name = GetFileName(moduleName);
+    if (name.find("System.") == 0)
+        return false;
+    return true;
+}
+
 HRESULT TryLoadModuleSymbols(ICorDebugModule *pModule,
                              std::string &id,
                              std::string &name,
@@ -258,11 +272,15 @@ HRESULT TryLoadModuleSymbols(ICorDebugModule *pModule,
     IfFailRet(pModule->GetMetaDataInterface(IID_IMetaDataImport, &pMDUnknown));
     IfFailRet(pMDUnknown->QueryInterface(IID_IMetaDataImport, (LPVOID*) &pMDImport));
 
+    name = GetModuleFileName(pModule);
+
     auto symbolReader = std::make_shared<SymbolReader>();
-    symbolReader->LoadSymbols(pMDImport, pModule);
-    symbolsLoaded = symbolReader->SymbolsLoaded();
 
-    name = GetModuleFileName(pModule);
+    if (ShouldLoadSymbolsFor(name))
+    {
+        symbolReader->LoadSymbols(pMDImport, pModule);
+        symbolsLoaded = symbolReader->SymbolsLoaded();
+    }
 
     IfFailRet(GetModuleId(pModule, id));