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()
сомнительна. Вы можете гораздо легче использовать точки останова, и с точками останова нет опасности случайно оставить его в готовом продукте.