Я использую пакет 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
}
}
Вопрос похож на Присоединиться к себе с помощью ClrMD? HRESULT: 0x80070057 но я иду на шаг дальше и собираю приложение, используя Wix. Затем я устанавливаю приложение на рабочий стол, чтобы оно работало без Visual Studio и его отладчика.
Окно сообщения не отображается, пока я ставлю его после строки 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
работает.