2017-02-06 8 views
-3

Я получаю это исключение:Как найти место, где исключение произошло в VS C++

Microsoft C++ exception: std:out_of_range at memory location 0xBlahBlahBlah 

Как я могу найти это место в моем коде?

+0

Выберите «break» из диалога, если я правильно помню. – StoryTeller

+0

Вы не помните его правильно. Диалога нет. –

+0

Существует диалоговое окно, если вы используете библиотеку времени выполнения отладки Visual Studio. – PaulMcKenzie

ответ

-2

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

int x[4]; 
x[5] = 1; 

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

+2

Это не вызовет исключение 'out_of_range'. То, что его выбрасывает, использует функцию 'at()' контейнера STL (например, 'std :: vector'), а индекс - за пределами. – PaulMcKenzie

2

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

Вы можете найти его в разделе: Debug->Windows->Exception Settings

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

+0

В настоящее время я использую VS2013, и этот параметр находится в Debug-> Exceptions ... Существует только опция break при вызове std :: exception. Я вижу несколько исключенных исключений в окне вывода визуальной студии, но отладчик не сломается. –

0

Вот проблема шаги разрешение:

  1. найти место памяти отображается в «исключения: EEEE в ячейке памяти 0xXXXXX» местоположение В разборке окне.
  2. Установите точку останова в этом месте и запустите программу, пока она не сломается.
  3. Проверьте стек вызовов, чтобы найти функцию, которая фактически выбрала исключение.

По какой-то причине отладчик не сломался, когда было выбрано исключение std :: out_of_range, даже несмотря на то, что настройки исключения отладчика были установлены для разрыва при вызове std :: exception.

-1

Мой подход где-то устанавливает точку перерыва, а затем нажмите, продолжайте нажимать F10 до тех пор, пока он не выбросит исключение. Теперь вы знаете, где ошибка.

+1

Не очень хороший подход, когда у вас есть тысячи строк кода с циклами и рекурсией. –

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

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