Подтвердить что ты не робот

Как подождать, пока подключен удаленный отладчик .NET.NET.

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

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

while(true) { }

Сохранялся процесс, и я мог "установить следующий оператор" с отладчиком, но он казался неудобным и грубым.

Console.ReadLine();

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

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

4b9b3361

Ответ 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");
        }
    }
}

Ответ 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();

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