Как подождать, пока подключен удаленный отладчик .NET.NET.
Сегодня я столкнулся с проблемой, связанной с удаленной отладкой программы. Программа была запущена из другой системы, поэтому у меня действительно нет возможности взаимодействовать с ней в командной строке. Я мог бы легко изменить его источник.
Что мне нужно было, так это то, что программа должна запускаться нормально, а затем ждать, пока я присоединяюсь к нему с помощью отладчика. Я не мог придумать способ сделать это, что сделало меня счастливым. Я нашел ошибку, но без помощи отладчика.
while(true) { }
Сохранялся процесс, и я мог "установить следующий оператор" с отладчиком, но он казался неудобным и грубым.
Console.ReadLine();
Считается нечетным, потому что на самом деле не было консоли для нажатия клавиши введите. (Это тоже не сработало). Установите следующий оператор, а затем запустите его обратно в ожидание ReadLine().)
Итак, какой код я могу вставить в .NET/CLR/С# программу, которая говорит "подождите здесь, пока я не смогу подключиться с помощью отладчика"?
Ответы
Ответ 1
Вы можете использовать свойство 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");
}
}
}
Ответ 2
Это похоже на то, что вам нужно:
Debugger.Launch();
http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx
"Запускает и присоединяет отладчик к процессу.
Ответ 3
Я не знаю, так как я никогда не пробовал, но мне интересно, можете ли вы использовать System.Diagnostics.Debugger.Break()
, чтобы он попал в точку останова, а затем дождался отладчика для присоединения. Я предполагаю, что удаленный отладчик будет работать, но я не знаю точно и в настоящее время не имею доступа к моей домашней среде, где я мог бы легко осмелиться и проверить свою теорию. Там статья MSDN говорит об использовании этого в приложении ASP.Net, поэтому я думаю, что это сработает.
Ответ 4
Debug.Assert(true);
также должен работать, я думаю. Кстати, я иногда сталкиваюсь с этой проблемой, и я делаю
MessageBox.Show()
: P: P
Ответ 5
Установите тайм-аут, который дает вам время для подключения отладчика.
Thread.Sleep(30000);
Ответ 6
Прикрепление удаленного отладчика работает точно так же, как с помощью локального отладчика.
Сначала сделайте обычное:
System.Diagnostics.Debugger.Launch();
Появится запрос на выбор отладчика. На этом этапе выполнение приостанавливается, поэтому вы можете подключить удаленный отладчик и выбрать "Нет" из приглашения.