Как дождаться подключения удаленного отладчика .NET - PullRequest
54 голосов
/ 12 декабря 2008

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

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

while(true) { }

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

Console.ReadLine();

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

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

Ответы [ 6 ]

99 голосов
/ 16 февраля 2009

Вы можете использовать свойство 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");
        }
    }
}
16 голосов
/ 14 сентября 2010

Это звучит как то, что вам нужно:

Debugger.Launch();

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

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

6 голосов
/ 12 декабря 2008

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

2 голосов
/ 14 января 2013

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

Сначала сделайте как обычно:

System.Diagnostics.Debugger.Launch();

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

1 голос
/ 16 февраля 2009
Debug.Assert(true);

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

MessageBox.Show() 

: P: P

0 голосов
/ 12 декабря 2008

Установите время ожидания, которое даст вам время для подключения отладчика.

Thread.Sleep(30000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...