В отладчике VS неперехваченные исключения приводят к тому, что программа прерывается в точке, где исключение выбрасывается (или достаточно близко), и в состоянии, которое позволяет вам просматривать все кадры стека и локальные переменные до этой точки.
Есть ли способ получить тот же результат (прерывание при выбросе), но исключение обнаружено в определенной точке? Меня не интересует делать это для ВСЕХ исключений или даже для всех исключений данного типа (которые могут быстро стать бесполезными), но если бы я мог сделать это для одного блока try или catch, я был бы счастлив
несколько связанных:
@jcollum, нижнее. Я хочу, чтобы отладчик остановился в точке выброса, но только в том случае, если исключение будет обнаружено в заданном месте.
Место, вызвавшее исключение, должно быть в трассировке стека (не на 100%, но). Это лучшее, что ты собираешься получить.





Диалоговое окно «Отладка» -> «Исключения» делает то, что вы хотите? Вы можете выбрать, какие исключения вызовут сбой VS, независимо от того, будут они перехвачены или нет. Я не знаю, как сделать это только для определенной части кода, только в зависимости от типа сгенерированного исключения.
Нет, это для каждого класса исключения (если я правильно это читаю), я хочу, чтобы что-нибудь было поймано в заданном месте.
К сожалению, я не знаю, как сломаться, когда что-нибудь бросается в определенное место. Хотя я определенно видел, что это пригодится.
Да, вы должны иметь возможность поставить точку останова на последней скобке вашего блока catch. Или команду throw, если вы перебрасываете.
Если вам просто нужно установить точку останова для любого исключения внутри определенного метода, выполните повторный выброс.
try { }
catch (Exception exc)
{
throw; // <-- breakpoint here
}
Обновлено: когда-то у меня была привычка ставить точки останова практически на все мои исключения. На собственном опыте выяснил, что это сильно замедлило работу отладчика, когда я достиг примерно 25 точек останова. Может иметь отношение только к VS2005.
Edit2: место, вызвавшее исключение, должно находиться в StackTrace объекта exc.
Я не думаю, что это сработает, так как это сломается после того, как стек будет раскручен до этого момента. :(
БКС: поставить паузу на «бросок»? Нет другого способа сделать то, что он хочет, AFAIK.
Если вы знаете, где будет сгенерировано исключение, просто поместите блок try / catch вокруг этой части кода и укажите, что jcollum говорит в своем ответе. Это сработает?
Уточните, пожалуйста: вы хотите, чтобы отладчик останавливался на необработанных исключениях, но только в определенных методах? Или вы хотите поставить остановку внутри своего блока catch?