VS отладчик не так? IndexOutOfRangeException, генерируемый кодом: f ++ - PullRequest
1 голос
/ 11 октября 2008

Почему возникает исключение в части "f ++" кода ниже ("IndexOutOfRangeException не обрабатывается кодом пользователя"):

for (int f = 0; f < gnf; f++)  
{  
    fieldNames[g] = grid.FieldName(f);  
}  

Ошибка в части кода "fieldNames [g] = ...", мой алгоритм должен быть:

for (int f = 0; f < gnf; f++)  
{  
    fieldNames[f] = grid.FieldName(f);  
}  

(Это не приводит к сбою.) Но отладчик не показывает исключение в строке "fieldNames [g] ..." при запуске неправильного (верхнего) кода.

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

Почему отладчик показывает исключение в неправильном месте? Оптимизации что ли? Кто-нибудь еще когда-нибудь ошибался в отладчике?

Ответы [ 2 ]

2 голосов
/ 12 октября 2008

У меня возникла похожая проблема с отладкой, и я думаю, что обычно это файл отладки (pdb), который не обновляется с помощью кода. Это может быть вызвано рядом проблем, включая

  • Файл был изменен, но компиляция библиотеки не состоялась по какой-либо причине. Таким образом, файл .dll и .pdb не соответствует исходному коду.
  • Файл .pdb устарел, поскольку компиляция была выполнена в настройке RELEASE
  • Библиотека существует в нескольких местах в файловой системе, и текущее решение каким-то образом настроено на просмотр другого файла .dll и .pdb.

Это происходит, если вся информация об отладке сохраняется в файле .pdb, и если файл устарел, в Visual Studio будет выделена неправильная строка.

Если все проекты находятся в одном решении и ссылка настроена правильно, перезапуск Visual Studio обычно решает эту проблему. (По какой-то причине компиляция может происходить неправильно, и перезапуск решает эту проблему - ну, в любом случае, мне так кажется ...)

2 голосов
/ 11 октября 2008

Может быть оптимизатором. Ваша сборка настроена на DEBUG или RELEASE?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...