Почему возникает исключение в части "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] ...», когда выполняется неправильный (верхний) код.
На данный момент я не использую потоки, поэтому не считаю, что это одна из тех ситуаций, когда «исключение отладки в многопоточной программе является самоубийством».
Почему отладчик показывает исключение не в том месте? Оптимизация или что-то в этом роде? У кого-нибудь еще отладчик был "неправильным" раньше?





Может быть оптимизатором. Ваша сборка настроена на ОТЛАДКУ или ВЫПУСК?
В моей сборке Release установлен параметр «Оптимизировать код», а в моей сборке Debug - нет. Возможно, я установлен в режим Release, что странно, поскольку я все еще могу выполнять довольно обширную отладку!
Вы все еще можете отлаживать сборку выпуска.
Ага, думаю, вот что происходит. Например, неиспользуемые переменные оптимизируются, и я не могу проверить их во время выполнения ...
У меня возникла аналогичная проблема с отладкой, и я думаю, что чаще всего это файл отладки (pdb), не обновленный с кодом. Это может быть вызвано рядом проблем, в том числе
Это происходит, если отладочная информация хранится в файле .pdb, и если файл устарел, в Visual Studio будет выделена неправильная строка.
Если все проекты находятся в одном решении и ссылка настроена правильно, перезапуск Visual Studio обычно решает эту проблему. (По какой-то причине компиляция может происходить некорректно, и перезапуск решает эту проблему - ну, в любом случае, мне кажется, что это так ...)
Кстати, значения, задействованные для всего, - 0, 1 и 2, так что это не похоже на то, чтобы само целое число переполнялось или что-то в этом роде.