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))
{
}
Другие вопросы по тегам