crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
qtshnik
  опции профиля:
сообщение 16.6.2014, 14:20
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 3.12.2010
Пользователь №: 2240

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ситуация, которую уже давно не могу решить. Есть приложение, написанное на Qt4, немало строчек кода.
Пользователь может часами работать с приложением без его падения, только если не вызывает диалог открытия файлов QFileDialog::getOpenFileName. Как только вызвал - приложение падает примерно через минуту, может и чуть дольше. Бывает, это воспроизводится часто, бывает, и не очень. Поменял строку
кода в произвольном месте и перекомпилировал - может измениться частота возникновения этой ошибки. У нас в команде, которая пишет это приложение, только у одного человека на компьютере это воспроизводится. Debug ничего не дает, поскольку в call-stack'е только вызовы системных DLL, то есть ошибка возникает не в коде, написанном нами.
Характерны 3 вещи:
1) среди выполняющихся потоков присутствует поток RPC Callback Thread, который создается при вызове диалога открытия файлов, но падение происходит не в нем.
2) до падения несколько раз в окне вывода (Output в Visual Studio) выводится сообщение
First-chance exception at 0x7684c41f in scanner.exe: 0x000006BA: Сервер RPC недоступен.
или
First-chance exception at 0x7684c41f in scanner.exe: 0x800401FD: Объект не подключен к серверу.
или
First-chance exception at 0x7684c41f in scanner.exe: 0x80010108: Вызванный объект был отключен от клиентов.
3) При падении в окне пишется пишется следующее:
First-chance exception at 0x7684c41f in scanner.exe: 0x80010108: Вызванный объект был отключен от клиентов.
First-chance exception at 0x74bcc99e in scanner.exe: 0xC0000005: Access violation reading location 0xfeeefeee.
First-chance exception at 0x7684c41f in scanner.exe: 0x80010108: Вызванный объект был отключен от клиентов.
Unhandled exception at 0x74bcc99e in scanner.exe: 0xC0000005: Access violation reading location 0xfeeefeee.

То, что возникает не всегда, похоже на порчу памяти, но тогда совсем не понятно: если память портится где-то в коде, написанном нами, то почему это не проявляется без диалога вызова файлов, хотя перераспределений памяти и вычислений разного характера много? Видимо, диалог открытия файлов подгружет разные специфические dll для ОС (типа dll системы контроля версий, которая подсвечивает специальными иконками статус файлов, поставленных на контроль), но почему эти DLL "живут" после закрытия этого диалога и пытаются подключаться к какому-то серверу? Как вычислить ту DLL, из-за которой падение?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 16.6.2014, 17:50
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


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

и, кстати, до начала серьёзных разборок: проверьте, не падает ли у вас RPC. нет ли в системных логах сообщений об ошибке запуска или об ошибках сервисов, от которых он зависит. может, он по каким-то причинам вырубается, а у вас где-то не ловится эксепшн и всё падает? тогда простое выключение сервиса RPC должно воспроизвести ошибку.

Сообщение отредактировал Iron Bug - 16.6.2014, 18:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
qtshnik
  опции профиля:
сообщение 23.6.2014, 8:52
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 3.12.2010
Пользователь №: 2240

Спасибо сказали: 0 раз(а)




Репутация:   0  


Заменил диалог открытия встроенным диалогом Qt (QFileDialog::DontUseNativeDialog) и проблема сразу исчезла!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 29.6.2025, 3:09