2010-05-17 3 views
2

Я использую компилятор Intel FORTRAN для компиляции числовой библиотеки. В тестовом случае были допущены ошибки в libc.so.6. Когда я присоединяю отладчик Intel (IDB), приложение успешно запускается. Как отлаживать ошибку, в которой отладчик предотвращает ошибку? Обратите внимание, что с gfortran возникла одна и та же ошибка.Ошибка, которая не связана с отладочным приложением

Я работаю в OpenSUSE 11.2 x64.

Ошибка:

forrtl: тяжелая (408): Форт: (3): Подстрочный # 1 из массива B имеет значение -534829264 которое меньше, чем нижняя граница 1

ответ

3

сообщение об ошибке довольно ясно для меня, вы пытаетесь получить доступ к несуществующему элементу массива. Я подозреваю, что значение -534829264 либо нежелательно, когда вы используете неинициализированную переменную для идентификации элемента в массиве, либо результат целочисленного арифметического переполнения. В любом случае вы должны включить флаг компиляции, чтобы принудительно проверить границы массива и запустить некоторые тесты. Я думаю, что флаг для компилятора Intel будет -CB, но проверьте документацию.

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

EDIT:

Не система времени выполнения вам сказать, что строка кода вызывает проблемы? Еще несколько вещей, чтобы попытаться диагностировать проблему. Используйте компилятор, чтобы предупредить вас об

  • использование переменных перед их инициализацией;
  • целочисленное арифметическое переполнение (не уверен, может ли компилятор определить это?);
  • любые принудительные преобразования от одного типа к другому и от одного вида к другому в одном и том же типе.

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

+0

спасибо. Любые советы по поиску, от чего идет звонок? Боюсь, я был испорчен Visual Studio. – ccook

+0

Благодарим вас за советы, однако это находится в выпущенной библиотеке (FISHPACK). Ошибки, которые у меня возникают, не имеют исходной информации. Я получаю что-то вроде: tblktri 00000000004A6AED Неизвестно Неизвестно Неизвестно tblktri 00000000004A55F5 Неизвестно Неизвестно Неизвестно libc.so.6 00007FAD079D6A7D Неизвестно Неизвестно Неизвестно – ccook

+0

Thanks Mark. Я сделал именно это. Я также использовал их тестовый пример, поэтому весь их код. Я прошел через код, и они, похоже, являются ошибкой вычисления индекса по одному из методов. Я не уверен, что его единственное представление, потому что я использую другой компилятор, чем они.Я отправил по электронной почте автору то, что я нашел. Спасибо за помощь! – ccook

1

не специалист в этой области, но пару вещей, чтобы рассмотреть следующие вопросы:

1) Является ли отладчик инициализацией переменной, используемой в качестве индекса к нулю первого, но без отладки не так переменная начинается с значение «нежелательной» (имело старую версию Pascal, которая использовала это).

2) Используете ли вы резьбу? Если это так, то отладка меняет порядок выполнения, поэтому некоторые готовые потоки завершаются вовремя.

+0

Спасибо за баллы. К счастью, я не использую threading. – ccook