我正在使用Microsoft.Diagnostics.Runtime
nuget 包,这是我尝试获取堆栈跟踪时的代码:
var pid = Process.GetCurrentProcess().Id;
// Line of error
using (var dataTarget = DataTarget.AttachToProcess(pid, 5000, AttachFlag.Invasive))
{
ClrInfo currentRuntime = dataTarget.ClrVersions[0];
var runtime = currentRuntime.CreateRuntime();
foreach (var t in runtime.Threads)
{
MessageBox.Show("Got here");
t.StackTrace
}
}
问题类似于Attach to self with ClrMD? HRESULT:0x80070057但我更进一步,使用 Wix 构建应用程序。然后,我将应用程序安装在我的桌面上,这样它就可以在没有 Visual Studio 及其调试器的情况下运行。
只要我把它放在 line 之后,消息框就不会显示using (var dataTarget = DataTarget.AttachToProcess(pid, 5000, AttachFlag.Invasive))
。如果我之前放置了消息框,则消息框会显示。
在代码中,我得到了错误
Microsoft.Diagnostics.Runtime.ClrDiagnosticsException: 'Could not attach to pid 624, HRESULT: 0x80070057'
我想我明白为什么AttachFlag.Invasive
我在 Visual Studio 中运行应用程序时因为它正在被调试而不起作用,但我不明白为什么在我使用 Wix 构建它并将其安装在我的桌面上之后该行不起作用。
同样,与附加的 Stackoverflow 帖子一样AttachFlag.Invasive
,AttachFlag.NonInvasive
它不起作用,但AttachFlag.Passive
确实有效。