VS2010 (Экспресс) отладчик перехватывает Ctrl + C в Консольном приложении - PullRequest
12 голосов
/ 16 октября 2010

Сводка ответов

Чтобы избежать перехвата отладчиком, сначала отключите хостинг Visual Studio (находится в свойствах проекта, вкладка «Отладка»)

Если вы используете экспресс-версию Visual Studio, это все, что вы можете сделать.

Если вы используете Pro или лучшую версию Visual Studio, вы можете дополнительно открыть Отладка> Исключения ...,Win32 Exceptions и снимите флажок Ctrl + C.

В качестве альтернативы, вы можете использовать Ctrl + Break при отладке, если только вы не нажали Ctrl + C в вашем мозгу.

Оригинал

Следующее было отредактировано.Ганс, похоже, отказался от своего ответа, но его допрос помог мне сузить формулировку проблемы:

Extra Clarity

  • Я не хочу изменятьповедение Ctrl + C.
  • Я не ищу обходной путь.
  • Я просто хочу, чтобы отладчик прерывался на NOT , когда во время нажатия Ctrl + Cсеанс отладки.

Обратите внимание, что следующий пример придуман.Это просто для демонстрации поведения.Я изменил строку ReadKey, так как она отвлекала людей.

Отладка (запуск) следующей программы:

class Program
{
    static void Main()
    {
        System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
    }
}

Нажмите Ctrl + C.Отладчик сломается, как если бы вы установили точку останова на линии ожидания.

Как отключить это?Я не хочу, чтобы отладчик вообще ломался для Ctrl + C.

Этого не происходит дома с VS2008 Pro.

Я сейчас пробовал его и с VS2008 Express, и с VS2010Express (единственные выпуски, с которыми я могу легко это проверить), и все они делают это.Это заставило меня поверить, что это либо поведение Express, либо что где-то есть настройка для его включения / выключения.

  1. Есть ли настройка для включения / выключения этой функции в любой версии /издание?
  2. Существует ли этот параметр в VS2008, VS2010 или обоих?
  3. Доступен ли этот параметр в редакциях Express?
  4. Является ли мой экземпляр VS2008 Pro уникальным?Является ли настройка чем-то, что было раскрыто в старой версии Visual Studio, которая была перенесена (я перенес настройки VS во многих новых версиях).

Ответы [ 5 ]

11 голосов
/ 18 января 2012

Возможно, это общеизвестно, но у нас возникла та же проблема при попытке остановить приложение верхнего уровня с помощью ctrl-c во время отладки в visual studio. В конце мы решили, что вам нужно отключить захват исключений control-c win32 при возникновении (Debug-> Exceptions или ctrl d, открыть исключения Win32, затем снять флажок control-c в брошенном столбце), а затем перейти к проекту. (который запускает службу) и на вкладке отладки установите флажок включить отладку неуправляемого кода. Мы используем MS Visual Studio 2010 Pro версии 10.0.40219.1 SP1Rel.

4 голосов
/ 17 октября 2010

Я нашел ответ, это опция исключения отладки. Я не знаю, как я пропустил это в первый раз, но вот оно:

Отладка -> Исключения ... Исключения Win32 - Control-C

Это в VS2008 Pro.

Я также могу подтвердить, что опция NOT существует в выпусках Express (отсутствует весь узел исключений Win32).

Таким образом, единственный вопрос, который я оставил, поскольку у меня нет владения VS2010 Pro (пока?): Существует ли узел исключения Win32 и исключение Control-C в выпуске VS2010 Pro?

4 голосов
/ 16 декабря 2010

Похоже, что в отладчике VS 2010 / .NET 4 есть ошибка , из-за которой вы получаете странное окно "без символов" при нажатии Ctrl + C в консольном приложении только с управляемой отладкой.Существует обходной путь для включения отладки в смешанном режиме.Ошибка говорит «исправлено», но если другие люди пытаются это исправить, сообщите об ошибке подключения, чтобы исправление попало в исправление / 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, но я вижу странное «источник недоступен» при отладке с управлением только в VS 2010 RTM, которая, как я считаю, является последними исправлениями.

1 голос
/ 19 мая 2013
0 голосов
/ 16 октября 2010

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

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

Вот пример использования в C #:

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

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

M

...