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

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 через многие новые версии).
4b9b3361

Ответ 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 с тем, что, по моему мнению, является последним исправлением.

Ответ 5

CTRL-C подключается непосредственно к самому консольному окну для операции "break". Откройте новое консольное приложение, запустите что-нибудь, а затем нажмите CTRL-C. Он прерывает пинг.

Вы сказали, что у VS Pro такого поведения нет. Я предполагаю, что он сам установил SetConsoleMode, тогда как VS Express этого не делает. Тем не менее, вы все равно можете прямо сказать консоли, чтобы игнорировать CTRL-C и рассматривать его как прямой ввод с помощью SetConsoleMode. Подробнее см. на этой ссылке:

Здесь пример использования в С#:

Просто поместите вызов с выбранными вами параметрами в начале вашей программы, и вам должно быть хорошо, чтобы идти!

Надеюсь, это поможет!

M