c# принудительный режим отладки программно

неважно, почему кто-то может захотеть это сделать, мне просто интересно знать, можно ли это сделать.

вот мой код, который не работает:

if (!Debugger.IsAttached)
{
    try
    {
        Debugger.Launch();
        while (!Debugger.IsAttached)
        {
            Thread.Sleep(1000);
        }
    }
    catch (System.Security.SecurityException e)
    {
        Console.WriteLine("exception " + e.Message);
    }
}

в основном мне было любопытно узнать, как использовать Debugger.Launch() метод.

3 ответов


отладчик.Launch запустит отладчик или ничего не будет делать, он уже подключен. Я считаю, что это не точка останова. Отладчик.Break() действительно сломается.

Вызова Отладчика.Launch () может делать разные вещи в зависимости от машины, например, если установлена Visual Studio или нет и т. д.

см. также связанную техническую статью:как: автоматический запуск отладчика


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


Я думаю, вы неправильно поняли, что Debugger.Launch() делает. Он работает как жестко закодированная точка останова.

когда ваша программа делает Debugger.Launch(), появится окно Just-In-Time-Debugging (при условии, что на компьютере установлена Visual Studio. В этот момент ваша программа остановилась - она не работает.

если вы выберете экземпляр VS, он будет запущен и будет остановлен на линии с Debugger.Launch(), как будто вы попали в точку останова.

так что нет смысла в цикле while (). Вы могли бы просто позвонить Debugger.Launch() всякий раз, когда вы хотите остановить программу, чтобы смотреть на что-то.

но утилита Debugger.Launch() сомнительна. Вы можете гораздо легче использовать точки останова, и с точками останова нет опасности случайно оставить его в готовом продукте.