Ошибка переполнения стека на одном ПК, нет ошибок на другом? - PullRequest
0 голосов
/ 20 августа 2011

Проблема заключается в следующем:

У меня есть проект, разработанный в Delphi XE на моем ноутбуке. Когда я запускаю его на своем настольном ПК, я получаю исключение «переполнение стека» в этой строке (я также использовал Writeln () для разных частей кода, и только эта строка является источником проблемы):

S_List.LoadFromFile('Test.txt');

(S_List - это локальный TStringList, который создается перед этой строкой)

Но, когда я запускаю тот же самый проект на моем ноутбуке, он работает без каких-либо ошибок или исключений вообще. Проблема не может заключаться в самом методе, потому что, когда я изменяю всю часть и пишу ее снова, используя TStreamReader, возникает то же исключение. На этот раз StreamReader.ReadLine(). Кроме того, я изменил расположение файла, имя, .... Проблема по-прежнему возникает.

Кажется, это проблема с файловой системой, но я понятия не имею, как это происходит.

Есть идеи? Это может быть из-за вируса или вредоносной программы?

P.S .: Оба (ноутбук и ПК) имеют Win7 и Delphi XE. Кроме того, оба имеют 2 ГБ оперативной памяти.

Редактировать: Просто чтобы прояснить, моя главная цель задать этот вопрос - не найти, где находится исключение (этого не может быть, если дать 1 строку кода, не так ли?). Но, вместо этого, почему эта ошибка НЕ ​​является постоянной в разных аппаратных средствах? Какая причина может иметь это? Кроме того, как я могу найти причину этого несоответствия?

Ответы [ 4 ]

4 голосов
/ 21 августа 2011

Я думаю, и все, что мы можем сделать, это предположить, что у вас есть неинициализированная локальная переменная.Или объект, к которому вы получаете доступ после освобождения.Я не уверен, как это приводит к переполнению вашего стека, но почти все возможно при таком сценарии.Как и MadExcept, вы должны использовать FastMM с полными настройками отладки.

2 голосов
/ 20 августа 2011

Я бы проверил это:

  1. Является ли тестовый файл одинаковым на обоих компьютерах
  2. Есть ли у вас одинаковые языковые настройки на обоих компьютерах
  3. Если Delphi XEимеет источник компонентов, отладочный источник TStringList, возможно, есть ошибка
  4. Как и предполагал Натаниал, используйте madExcept или аналогичную библиотеку
  5. Создайте простую программу, которая просто выделит TStringList и загрузит тестовый файл.Если это работает, ошибка находится где-то еще в вашем коде, если это не удается, ошибка, вероятно, в TStringList
2 голосов
/ 20 августа 2011

Если кому-то трудно диагностировать исключение в конкретной среде с помощью приложения Delphi, я настоятельно рекомендую madExcept . Он бесплатный для некоммерческого использования, очень прост в настройке и ОЧЕНЬ полезен. Установите его, включите для своего проекта, создайте отладочную сборку и разверните ее на проблемном компьютере. Когда возникает исключение, вы должны получить очень подробный стек вызовов о том, где произошла проблема.

0 голосов
/ 21 августа 2011

Проверьте наличие дубликатов DCU и, если возможно, выполните полную сборку установленных библиотек и приложения, чтобы проверить, сохраняется ли ошибка.

...