From: Steve MacLean Date: Wed, 25 Mar 2020 21:45:52 +0000 (-0400) Subject: dotnet-dump analyze enable cross DAC lookup (#954) X-Git-Tag: submit/tizen_5.5/20200504.045052~11^2^2~32 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8fe68a327b6cc9819580cf5d9c6e6442d1bffe5b;p=platform%2Fcore%2Fdotnet%2Fdiagnostics.git dotnet-dump analyze enable cross DAC lookup (#954) * Fix SOSHost.IsCoreClrRuntimeModule() * Fix cross DAC LoadNativeSymbols() This allows the SOSHost to find the cross DAC in the symbol cache * Feedback When creating a SymbolStoreKey semi-clone copy all the fields --- diff --git a/src/SOS/SOS.Hosting/SOSHost.cs b/src/SOS/SOS.Hosting/SOSHost.cs index 115bdeb23..b117953d5 100644 --- a/src/SOS/SOS.Hosting/SOSHost.cs +++ b/src/SOS/SOS.Hosting/SOSHost.cs @@ -154,8 +154,6 @@ namespace SOS const string DesktopRuntimeModuleName = "clr"; - private static readonly string s_coreclrModuleName; - internal readonly IDataReader DataReader; internal readonly AnalyzeContext AnalyzeContext; @@ -174,16 +172,6 @@ namespace SOS static SOSHost() { AssemblyResolver.Enable(); - - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - s_coreclrModuleName = "coreclr"; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { - s_coreclrModuleName = "libcoreclr.so"; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { - s_coreclrModuleName = "libcoreclr.dylib"; - } } /// @@ -1110,7 +1098,19 @@ namespace SOS internal static bool IsCoreClrRuntimeModule(ModuleInfo module) { - return IsModuleEqual(module, s_coreclrModuleName); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + return IsModuleEqual(module, "coreclr") || IsModuleEqual(module, "libcoreclr"); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + return IsModuleEqual(module, "libcoreclr.so"); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + return IsModuleEqual(module, "libcoreclr.dylib"); + } + return false; } internal static bool IsDesktopRuntimeModule(ModuleInfo module) diff --git a/src/SOS/SOS.NETCore/SymbolReader.cs b/src/SOS/SOS.NETCore/SymbolReader.cs index 1ee618093..b7af5278a 100644 --- a/src/SOS/SOS.NETCore/SymbolReader.cs +++ b/src/SOS/SOS.NETCore/SymbolReader.cs @@ -300,8 +300,18 @@ namespace SOS try { IEnumerable keys = generator.GetKeys(flags); - foreach (SymbolStoreKey key in keys) + foreach (SymbolStoreKey forKey in keys) { + SymbolStoreKey key = forKey; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && key.FullPathName.Equals("libmscordaccore.so")) + { + // We are opening a Linux dump on Windows + // We need to use the Windows index and filename + key = new SymbolStoreKey(key.Index.Replace("libmscordaccore.so", "mscordaccore.dll"), + "mscordaccore.dll", + key.IsClrSpecialFile, + key.PdbChecksums); + } string moduleFileName = Path.GetFileName(key.FullPathName); s_tracer.Verbose("{0} {1}", key.FullPathName, key.Index); diff --git a/src/Tools/dotnet-dump/Analyzer.cs b/src/Tools/dotnet-dump/Analyzer.cs index ead2bad85..ed93268e0 100644 --- a/src/Tools/dotnet-dump/Analyzer.cs +++ b/src/Tools/dotnet-dump/Analyzer.cs @@ -247,7 +247,9 @@ namespace Microsoft.Diagnostics.Tools.Dump // We are opening a Linux dump on Windows // We need to use the Windows index and filename key = new SymbolStoreKey(key.Index.Replace("libmscordaccore.so", "mscordaccore.dll"), - key.FullPathName.Replace("libmscordaccore.so", "mscordaccore.dll")); + key.FullPathName.Replace("libmscordaccore.so", "mscordaccore.dll"), + key.IsClrSpecialFile, + key.PdbChecksums); } } else