VS2010 (Express) отладчик, улавливающий Ctrl + C в приложении консоли
Резюме ответов
Чтобы избежать захвата отладчика Ctrl + C, сначала отключите Visual Studio Хостинг (найден в свойствах проекта, вкладка "Отладка" )
Если вы используете экспресс-версию Visual Studio, все, что вы возможно.
Если вы используете Pro или лучшую версию Visual Studio, вы можете дополнительно открыть Debug > Исключения..., Win32 Исключения и снимите флажок Ctrl + C.
Как альтернатива, вы можете использовать Ctrl + Break при отладке, если только я не сжимаю Ctrl + C в вашем мозгу.
Оригинал
Отредактировано следующее. Кажется, Ханс отозвал свой ответ, но его опрос помог мне сузить постановку проблемы:
Дополнительная Ясность
- Я не хочу изменять поведение Ctrl + C.
- Я не ищу работу.
- Я просто хочу, чтобы отладчик НЕ разбивался, когда во время сеанса отладки нажата клавиша Ctrl +.
Обратите внимание, что приведен следующий пример. Это просто, чтобы продемонстрировать поведение. Я изменил строку ReadKey, поскольку это отвлекало людей.
Отладка (запуск) следующей программы:
class Program
{
static void Main()
{
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
}
}
Нажмите Ctrl + C. Отладчик сломается, как если бы вы установили точку останова на линии сна.
Как вы отключите это? Я не хочу, чтобы отладчик вообще разбивался на Ctrl + C.
Это не происходит дома с VS2008 Pro.
Теперь я попробовал это как с VS2008 Express, так и с VS2010 Express (единственные выпуски, с которыми я могу легко их протестировать), и все это делают. Это заставило меня поверить, что это либо поведение Express, либо что есть где-то, чтобы включить/выключить его.
- Есть ли параметр для включения/выключения этой функции в любой версии/редакции?
- Этот параметр существует в VS2008, VS2010 или обоих?
- Установлена ли настройка в выпусках Express?
- Является ли мой экземпляр VS2008 Pro уникальным? Является ли настройка тем, что было обнаружено в старой версии Visual Studio, перенесенной (я перенесла настройки VS через многие новые версии).
Ответы
Ответ 1
Я нашел ответ, это опция отладки Exception. Я не знаю, как я пропустил это в первый раз, но вот он:
Отладка → Исключения... Исключения Win32 - Control-C
Это в VS2008 Pro.
Я также могу подтвердить, что опция НЕ существует в выпусках Express (все исключения Win32 node отсутствуют).
Итак, единственный вопрос, который у меня остался, поскольку я не владею VS2010 Pro (пока?): Есть ли исключения Win32 node и исключение Control-C в редакции VS2010 Pro?
Ответ 2
Возможно, сейчас это общеизвестно, но у нас была такая же проблема, когда мы пытались остановить приложение topshelf с помощью ctrl-c, будучи отлаживаемым в visual studio. В конце концов мы поняли, что вам нужно отключить захват исключений control-c win32 при броске (Debug- > Exceptions, или ctrl d, e open Win32 Exceptions, а затем снять флажок control-c в брошенном столбце), а затем также перейти к проекту (который запускает сервис), а на вкладке отладки проверяет, что опция включает неуправляемую отладку кода. Мы используем MS Visual Studio 2010 Pro версии 10.0.40219.1 SP1Rel.
Ответ 3
Кажется, есть ошибка в отладчике VS 2010/.NET 4, когда вы получаете странное окно без символов, когда Ctrl + C нажимается в консольном приложении только с управляемой отладкой. Для включения отладки в режиме смешанного режима существует обход. Ошибка говорит "fixed", но если другие люди бьют это, сообщите об этом на ошибке подключения, чтобы исправление попало в исправление /SP.
Я видел это во время отладки службы, которая использует библиотеку TopShelf для размещения службы Windows, которая также позволяет отлаживать службу локально в качестве консольного приложения.
https://connect.microsoft.com/VisualStudio/feedback/details/524889/debugging-c-console-application-that-handles-console-cancelkeypress-is-broken-in-net-4-0?wa=wsignin1.0
Ссылки по теме: TopShelf, (пришел из MassTransit)
Обновление. Кажется, ошибка подключения для VS 2010 Beta, но я вижу странный "нет источника" в режиме отладки с удаленным хостингом с окончательной версией VS 2010 с тем, что, по моему мнению, является последним исправлением.
Ответ 4
TopShelf сообщила об этой проблеме:
https://github.com/Topshelf/Topshelf/issues/10
И Microsoft подтвердила это:
https://connect.microsoft.com/VisualStudio/feedback/details/524889/debugging-c-console-application-that-handles-console-cancelkeypress-is-broken-in-net-4-0
Ответ 5
CTRL-C подключается непосредственно к самому консольному окну для операции "break". Откройте новое консольное приложение, запустите что-нибудь, а затем нажмите CTRL-C. Он прерывает пинг.
Вы сказали, что у VS Pro такого поведения нет. Я предполагаю, что он сам установил SetConsoleMode, тогда как VS Express этого не делает. Тем не менее, вы все равно можете прямо сказать консоли, чтобы игнорировать CTRL-C и рассматривать его как прямой ввод с помощью SetConsoleMode. Подробнее см. на этой ссылке:
Здесь пример использования в С#:
Просто поместите вызов с выбранными вами параметрами в начале вашей программы, и вам должно быть хорошо, чтобы идти!
Надеюсь, это поможет!
M