Прерывание при выдаче исключения для пойманного исключения

В отладчике VS неперехваченные исключения приводят к тому, что программа прерывается в точке, где исключение выбрасывается (или достаточно близко), и в состоянии, которое позволяет вам просматривать все кадры стека и локальные переменные до этой точки.

Есть ли способ получить тот же результат (прерывание при выбросе), но исключение обнаружено в определенной точке? Меня не интересует делать это для ВСЕХ исключений или даже для всех исключений данного типа (которые могут быстро стать бесполезными), но если бы я мог сделать это для одного блока try или catch, я был бы счастлив

несколько связанных:

Уточните, пожалуйста: вы хотите, чтобы отладчик останавливался на необработанных исключениях, но только в определенных методах? Или вы хотите поставить остановку внутри своего блока catch?

jcollum 07.01.2009 02:48

@jcollum, нижнее. Я хочу, чтобы отладчик остановился в точке выброса, но только в том случае, если исключение будет обнаружено в заданном месте.

BCS 07.01.2009 02:53

Место, вызвавшее исключение, должно быть в трассировке стека (не на 100%, но). Это лучшее, что ты собираешься получить.

jcollum 07.01.2009 03:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
1 495
2

Ответы 2

Диалоговое окно «Отладка» -> «Исключения» делает то, что вы хотите? Вы можете выбрать, какие исключения вызовут сбой VS, независимо от того, будут они перехвачены или нет. Я не знаю, как сделать это только для определенной части кода, только в зависимости от типа сгенерированного исключения.

Нет, это для каждого класса исключения (если я правильно это читаю), я хочу, чтобы что-нибудь было поймано в заданном месте.

BCS 07.01.2009 02:36

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

Andy 07.01.2009 02:45

Да, вы должны иметь возможность поставить точку останова на последней скобке вашего блока catch. Или команду throw, если вы перебрасываете.

Если вам просто нужно установить точку останова для любого исключения внутри определенного метода, выполните повторный выброс.

try {  }
catch (Exception exc)
{ 
   throw;  // <-- breakpoint here
} 

Обновлено: когда-то у меня была привычка ставить точки останова практически на все мои исключения. На собственном опыте выяснил, что это сильно замедлило работу отладчика, когда я достиг примерно 25 точек останова. Может иметь отношение только к VS2005.

Edit2: место, вызвавшее исключение, должно находиться в StackTrace объекта exc.

Я не думаю, что это сработает, так как это сломается после того, как стек будет раскручен до этого момента. :(

BCS 07.01.2009 02:55

БКС: поставить паузу на «бросок»? Нет другого способа сделать то, что он хочет, AFAIK.

jcollum 07.01.2009 03:02

Если вы знаете, где будет сгенерировано исключение, просто поместите блок try / catch вокруг этой части кода и укажите, что jcollum говорит в своем ответе. Это сработает?

Andy 07.01.2009 15:16

Другие вопросы по теме