При тестировании и отладке кода C++ часто обнаруживаются ошибки, которые может обнаружить визуальная студия. Обычно он реагирует на создание всплывающего окна всплывающих окон, которые позволяют остановить выполнение и проверить стек вызовов и значения переменных и т.д.
Мне интересно, есть ли какой-либо возможный способ, чтобы отладчик выбрал исключение вместо обычного перерыва.
Я хочу иметь возможность сделать что-то вроде:
try {
functionThatMightBreak(); // break as in, derefence null, uninitialized variable, iterator not derefenceable etc
} catch (SomeType e) {
// a bit more stuff
}
Посмотрите на Structured Exceptional Handling aka SEH, который предлагается как V C++ -специальное расширение языка C++.
ср
Если вы скомпилируете свой код с /EHa
компилятора /EHa
, тогда компилятор будет генерировать код таким образом, чтобы исключения Win32 (например, нарушения доступа) были выбраны как обычные C++ исключения и могут быть пойманы блоками catch(...)
.
Если вы это сделаете, будьте осторожны, чтобы весь ваш код был скомпилирован с теми же параметрами (и будьте особенно осторожны с любыми сторонними библиотеками, которые вы используете).
Исключения, которые вы пытаетесь поймать (например, нарушения доступа), являются специфичными для ОС. Visual Studio позволяет уловить их с помощью catch(...)
в качестве расширения. Вы также можете взглянуть на Управление структурированными исключениями.