2017-01-31 23 views
1

Я хочу остановить отладку, когда:Visual Studio 2015 отладчик останавливается на перекачиваемой исключением функции DebuggerHidden

  • перекачиваемой или возникает необработанное исключение.
  • Необработанное исключение возникает в функции, которая имеет атрибут DebuggerStepThrough или DebuggerHidden. Отладчик должен останавливаться там, где вызывается эта функция.

Нет проблем до сих пор, я мог бы сделать Visual Studio 2015 таким же. Однако, когда обработанное исключение происходит внутри функции, которая имеет DebuggerStepThrough или DebuggerHidden attibute, отладчик останавливается, когда эта функция вызывается.

Я не мог найти способ исправить это. Я не помню такого поведения в Visual Studio 2010 или 2013 году. Я искал об этом и не нашел никого, кто спрашивал об этой же проблеме.

Редактировать: Я пробовал ОтладчикNonUserCode, результат такой же. В нем говорится: «Исключение выбрано». Нет! enter image description here

Мои настройки: enter image description here

+0

Вы попросили отладчика остановиться на исключении «первый шанс». Хорошая функция, довольно важная для отладки кода, который проглатывает исключения, когда это не должно. Вы можете просто снять флажок «Перерыв, когда этот тип исключения будет сброшен» в диалоговом окне. Но, скорее всего, вы захотите сбросить Debug> Windows> Exception Settings. Если вы хотите использовать атрибут, верните «Инструменты»> «Параметры»> «Отладка»> «Общие»> «Включить только мой код». –

+0

Я думаю, что вы ошиблись. Я пробовал эти и не мог решить свою проблему. Я ** хочу отладчик должен прерывать ** для исключения, но не хочу, чтобы он разбился на исключение, которое ** обрабатывается ** в ** функции DebuggerHidden **. – Koray

+1

Хм, нет, я уверен, что я точно знаю, что вы имеете в виду Почему вы не хотите восстанавливать настройки, о которых я рассказывал, очень сложно угадать.Как есть, похоже, вы еще не осознали, что вы случайно их изменили. Если вы * намеренно * изменили их, важно, чтобы вы объясните, почему вы это сделали. –

ответ

1

Вы можете использовать DebuggerNonUserCode Атрибут вместо атрибута DebuggerStepThrough или DebuggerHidden в VS2015, так как есть несколько небольших различий между ними:

https://blogs.msdn.microsoft.com/visualstudioalm/2016/02/12/using-the-debuggernonusercode-attribute-in-visual-studio-2015/

Update :

Я получаю ту же проблему, что и ваш, используя VS2 +015. Я обнаружил, что это будет связано с опцией отладки, пожалуйста, включите опцию «Использовать режим управляемой совместимости» в разделе TOOLS-> Options-> Debugging. Отлаживайте его снова.

enter image description here

+0

Это не сработало. Я думаю, что это явно ошибка. – Koray

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительно] (http://meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. Как есть, статья содержит важное предупреждение, которое * NOT * описано в этом ответе –

+0

В VS2013 DebuggerStepThough атрибут, используемый для выполнения той вещи, которую я хочу. Если я не буду повторять это неправильно. – Koray

1

В статье MSDN Using the DebuggerNonUserCode Attribute in Visual Studio 2015 объясняет, что делает DebuggerNonUserCode и почему она не игнорирует исключения.

Это вызвано улучшением производительности в VS 2015

когда Just My Code включен, отладчик больше не получает уведомление об исключениях, которые выбрасываются и обрабатываются за пределами «кода».

Это приводит к большому повышению производительности, потому что:

Производительность отладки улучшилось, потому что, когда Just My Code включен, отладчик больше не получает уведомление об исключениях, которые выбрасываются и обрабатываются за пределами «ваш код".

Такое поведение может быть отключено с помощью ключа реестра, введенного с Update 2:

Чтобы включить это, выполните следующую команду из командной строки, которая будет твик реестра для вас:

reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1 

Вам нужно будет поэкспериментировать и посмотреть, что более важно, игнорируя исключения или улучшая производительность отладчика.

+0

@Koray считают * не * бросать тоже. так часто, что они причиняли вам боль, они также ухудшают производительность во время выполнения. Возвращение объекта результата (который заставляет вызывающего абонента проверять успех) - это одно из решений, используемых в функциональных языках.Вот как работает HttpClient, например, –

+0

@Panagiotis Kanavos, спасибо за вашу помощь, он предоставил более подробную и полезную информацию :) –

+0

На самом деле я не пишу коды, зависящие от исключений. Спасибо за отличный ответ и ваш комментарий. – Koray

 Смежные вопросы

  • Нет связанных вопросов^_^