Очень странная ошибка в моем приложении из компонента - PullRequest
0 голосов
/ 23 января 2009

Хорошо, мое приложение выполняет все, что оно должно было сделать, и оно делает то же самое каждый раз, так что его тестирование не должно быть таким большим.

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

тип ошибки: "нарушение доступа по адресу", бла ...

диалоговое окно открытия файла не имеет фильтров и находится в том же виде, что и на панели задач, и вылетает после того, как я вызываю "opendialog.execute"

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

как я уже сказал, это даже не происходит на 100% все время, и это не зависит от конкретной машины .. вылетает на 3 разных компьютерах win xp.

HELP !!

Дополнительно; Выводы Я могу открыть и запустить файл, и все в порядке, пока я не создаю подсказку для всплывающего окна на файл, который я создал.

Ответы [ 4 ]

3 голосов
/ 23 января 2009

Удалите компонент TApplicationEvent s в своей форме и добавьте обработчик события для события OnHint . Затем установите точку останова и посмотрите, сможете ли вы сломать ее до того, как она рухнет (как вы сказали, это звучит так, как будто она рушится, когда пытается отобразить подсказку). Затем вы можете скомпилировать с отладочный DCU и отследить и посмотреть, на чем он падает.

Полагаю, у вас все еще есть дескриптор файла с эксклюзивной блокировкой на файл, возможно. Проверьте дескрипторы файлов и убедитесь, что вы правильно их закрываете. Что произойдет, если вы попытаетесь открыть один из этих файлов из блокнота во время работы программы?

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

Удачи!

1 голос
/ 23 января 2009

Диалог открытия файла - это, по сути, экземпляр проводника. Это означает, что каждое установленное расширение оболочки также загружается. Одна из проблем заключается в том, что, как только вы используете диалог открытия файла, каждое расширение оболочки также использует ваш стек для хранения переменных / адресов возврата, ... Если ваш стек недостаточно велик, это может привести к сбоям.

Попробуйте увеличить размер стека вашего приложения.

0 голосов
/ 24 января 2009

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

Если вы еще не используете FastMM, используйте его. У него есть несколько хороших проверок памяти.

0 голосов
/ 23 января 2009

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

...