Как дождаться подключения удаленного отладчика .NET

StackOverflow https://stackoverflow.com/questions/361077

Вопрос

Сегодня я столкнулся с проблемой: мне нужно было удаленно отладить программу.Программа была запущена из другой системы, поэтому возможности взаимодействовать с ней в командной строке у меня толком нет.Хотя я мог бы легко изменить его источник.

Мне нужно было, чтобы программа нормально запустилась, а затем дождалась, пока я подключусь к ней с помощью отладчика.Я не мог придумать способ сделать это, чтобы сделать меня счастливым.Я нашел ошибку, но без помощи отладчика.

while(true) { }

Поддерживал процесс, а затем я мог «установить следующий оператор» с помощью отладчика, но это казалось неуклюжим и грубым.

Console.ReadLine();

Мне показалось странным печатать, поскольку на самом деле у меня не было консоли, которую я мог бы нажать. входить в.(Это тоже не сработало.Установка следующего оператора и последующий запуск вернут вас обратно в режим ожидания ReadLine().)

Итак, какой код я могу вставить в программу .NET/CLR/C#, которая говорит: «Подождите здесь, пока я не смогу подключиться с помощью отладчика»?

Это было полезно?

Решение

Вы можете использовать System.Diagnostics.Debugger.IsAttached свойство, чтобы проверить, подключен ли к процессу отладчик.Это приложение будет ждать, пока не будет подключен отладчик:

using System;
using System.Diagnostics;
using System.Threading;

namespace DebugApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Waiting for debugger to attach");
            while (!Debugger.IsAttached)
            {
                Thread.Sleep(100);
            }
            Console.WriteLine("Debugger attached");
        }
    }
}

Другие советы

Это похоже именно на то, что вам нужно:

Debugger.Launch();

http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx

«Запускает и присоединяет к процессу отладчик».

Я не знаю, так как я никогда не пробовал, но мне интересно, могли бы вы использовать System.Diagnostics.Debugger.Break() чтобы он достиг точки останова, а затем дождался подключения отладчика.Я предполагаю, что удаленный отладчик будет работать, но я не знаю наверняка, и в настоящее время у меня нет доступа к моей домашней среде, где я мог бы легко смоделировать его и проверить свою теорию.Есть Статья MSDN говорю об использовании его в приложении ASP.Net, поэтому я думаю, что это сработает.

Подключение удаленного отладчика работает точно так же, как и использование локального отладчика.

Сначала делаем обычное:

System.Diagnostics.Debugger.Launch();

Вы увидите приглашение выбрать отладчик.На этом этапе выполнение приостанавливается, поэтому вы можете подключить удаленный отладчик и выбрать «Нет» в командной строке.

Debug.Assert(true);

тоже должно работать, я думаю.Кстати, я тоже иногда сталкиваюсь с этой проблемой, и я это делаю.

MessageBox.Show() 

:П :П

Установите тайм-аут, который даст вам время подключить отладчик.

Thread.Sleep(30000);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top