ClrMD - AttachToProcess с использованием AttachFlag.Invasive и AttachFlag.NonInvasive Crashing
Я использую 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 и установил его на рабочий стол.
Опять же, как и в прикрепленном сообщении Stackru, AttachFlag.Invasive
а также AttachFlag.NonInvasive
не работает, но AttachFlag.Passive
работает.
0 ответов
Как мой ответ: /questions/36255167/prisoedinitsya-k-sebe-s-pomoschyu-clrmd-hresult-0x80070057/55323028#55323028
Ты можешь использовать DataTarget.CreateSnapshotAndAttach
. Этот метод создает снимок процесса и создаетDataTarget
от него. Пример:
var processId = Process.GetCurrentProcess().Id;
using (var dataTarget = DataTarget.CreateSnapshotAndAttach(processId))
{
}