Очень странная ошибка в моем приложении из компонента
Хорошо, мое приложение выполняет все, что оно должно было сделать, и оно делает то же самое каждый раз, так что его тестирование не должно быть таким уж большим испытанием.
сбой "иногда" не всегда. это происходит при наведении курсора мыши на файл в диалоге открытия файла, который я недавно вывел. не мгновенно он ждет около полсекунды в секунду, и я знаю, что это когда openfiledialog вызывает такие данные, как размер файла и когда он был создан и какой тип документа это.. (стандартная) информация о наведении мыши.. вещь это использует "opendialog", и я не написал этот код, так что эта ошибка не из моих дел, это?????? если это как, если это не так, как / что я могу сделать, чтобы остановить это..
тип ошибки - "нарушение доступа по адресу"...
диалог открытия файла не имеет фильтров и находится точно в том же виде, что и на панели задач, и вылетает после того, как я вызываю "opendialog.execute"
Сначала я подумал, что он все еще может писать в него, но затем он продолжил, после того как я остановил приложение, открывая любой новый файл, пока последний не завершил процесс сохранения.
как я сказал, это даже не происходит на 100% все время, и это не зависит от конкретной машины.. происходит сбой на 3 различных ПК Win XP.
ПОМОГИТЕ!!
Дополнительно; Выводы Я могу открыть и запустить файл, и все хорошо, пока я не делаю подсказку, чтобы всплыть на файл, который я создал.
4 ответа
Удалите компонент TApplicationEvent в своей форме и добавьте обработчик события для события OnHint. Затем установите точку останова и посмотрите, сможете ли вы сломать ее до того, как она рухнет (как вы сказали, это звучит так, как будто она рушится, когда пытается отобразить подсказку). Затем вы можете скомпилировать с отладочным DCU и отследить и посмотреть, на чем он падает.
Я думаю, у вас все еще есть дескриптор файла с эксклюзивной блокировкой файла. Проверьте дескрипторы файлов и убедитесь, что вы правильно их закрываете. Что произойдет, если вы попытаетесь открыть один из этих файлов из блокнота во время работы программы?
Прерывистое поведение может быть связано с другим путем кода в состоянии ошибки, которое приводит к утечке дескриптора файла.
Удачи!
Диалог с открытым файлом - это, по сути, экземпляр проводника. Это означает, что каждое расширение оболочки, которое вы установили, также загружается. Одна из проблем заключается в том, что, как только вы используете диалог открытия файла, каждое расширение оболочки также использует ваш стек для хранения переменных / адресов возврата... Если ваш стек не достаточно большой, это может привести к сбоям.
Попробуйте увеличить размер стека вашего приложения.
Нарушение доступа, скорее всего, вообще не связано с открытым диалогом. Я настоятельно рекомендую вам заглянуть в свой код и убедиться, что вы не перезаписываете границы памяти - если вы используете динамическую проверку массивов и убедитесь, что у вас нет доступа к элементу за его пределами; то же самое, если вы вручную выделяете память.
Если вы еще не используете FastMM, используйте его. У него есть хорошие проверки памяти.
Я предлагаю вам подключить к процессу отладчик и выяснить, что именно приводит к аварийному завершению программы. Это должно начать вас...