Я получаю это исключение:Как найти место, где исключение произошло в VS C++
Microsoft C++ exception: std:out_of_range at memory location 0xBlahBlahBlah
Как я могу найти это место в моем коде?
Я получаю это исключение:Как найти место, где исключение произошло в VS C++
Microsoft C++ exception: std:out_of_range at memory location 0xBlahBlahBlah
Как я могу найти это место в моем коде?
Эта ошибка является логической ошибкой времени выполнения, которая может случиться во многих случаях, и, чтобы найти ее, вы должны отследить свой код и искать некоторые логические ошибки. например
int x[4];
x[5] = 1;
В этом случае вы используете блок памяти, который не допускается.
Это не вызовет исключение 'out_of_range'. То, что его выбрасывает, использует функцию 'at()' контейнера STL (например, 'std :: vector'), а индекс - за пределами. – PaulMcKenzie
Один из способов - включить «Разрыв при броске» для всего, что находится в настройках исключения. Он будет иметь список типов исключений, которые можно включить с помощью флажков. Я, как правило, включу их всех и уйду. Вы можете получить несколько обработанных исключений на этом пути, но вы не должны пропустить проблему.
Вы можете найти его в разделе: Debug->Windows->Exception Settings
После того, как вы закончите, я рекомендую вернуть его к настройкам по умолчанию (есть графическая кнопка для него), так что вы не держите ломать каждый раз, когда обрабатывается исключение является выброшены.
В настоящее время я использую VS2013, и этот параметр находится в Debug-> Exceptions ... Существует только опция break при вызове std :: exception. Я вижу несколько исключенных исключений в окне вывода визуальной студии, но отладчик не сломается. –
Вот проблема шаги разрешение:
По какой-то причине отладчик не сломался, когда было выбрано исключение std :: out_of_range, даже несмотря на то, что настройки исключения отладчика были установлены для разрыва при вызове std :: exception.
Мой подход где-то устанавливает точку перерыва, а затем нажмите, продолжайте нажимать F10 до тех пор, пока он не выбросит исключение. Теперь вы знаете, где ошибка.
Не очень хороший подход, когда у вас есть тысячи строк кода с циклами и рекурсией. –
Выберите «break» из диалога, если я правильно помню. – StoryTeller
Вы не помните его правильно. Диалога нет. –
Существует диалоговое окно, если вы используете библиотеку времени выполнения отладки Visual Studio. – PaulMcKenzie