Как дождаться подключения удаленного отладчика .NET
-
21-08-2019 - |
Вопрос
Сегодня я столкнулся с проблемой: мне нужно было удаленно отладить программу.Программа была запущена из другой системы, поэтому возможности взаимодействовать с ней в командной строке у меня толком нет.Хотя я мог бы легко изменить его источник.
Мне нужно было, чтобы программа нормально запустилась, а затем дождалась, пока я подключусь к ней с помощью отладчика.Я не мог придумать способ сделать это, чтобы сделать меня счастливым.Я нашел ошибку, но без помощи отладчика.
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);