当我通过ClrMd执行"~*k“命令时,它使用clr!DllUnregisterServerInternal返回堆栈跟踪,而不是正确的值。看上去符号没有被装载。如果我在WinDBG中直接执行"~*k“命令,一切看起来都很好。
this.DataTarget = DataTarget.LoadCrashDump(pathToMemoryDump, CrashDumpReader.DbgEng);
this.DataTarget.SymbolLocator.SymbolCache = @"C:\symbols";
this.DataTarget.EnumerateModules().ToList().ForEach((m) =>
{
this.DataTarget.SymbolLocator.FindBinary(m);
this.DataTarget.SymbolLocator.FindPdb(m);
});
this.ClrRuntime = DataTarget.ClrVersions[0].CreateRuntime();然后,我使用Execute方法对加载的内存转储执行查询:
(IDebugControl)client.Execute(DEBUG_OUTCTL.ALL_CLIENTS, cmd, DEBUG_EXECUTE.DEFAULT);有人有什么建议吗?我的意图是为本机线程获得正确的堆栈跟踪。
发布于 2022-03-05 18:47:37
设置您的符号路径
var symbols = DataTarget.DebuggerInterface as IDebugSymbols;
symbols.SetSymbolPath("http://msdl.microsoft.com/download/symbols");https://stackoverflow.com/questions/61925576
复制相似问题