Я столкнулся с проблемой, которая действительно смущает меня. Я использую Qt Creator 3.1.2, с Qt 5.3 на Windows 7, использую компилятор MSVC 10.0 и CDB из Debugging Tools for Windows 8.1. (Не уверен, стоит ли искать отладчик для Windows 7, но до сих пор у меня не было проблем).
Проблема: когда я пытаюсь использовать QFileDialog :: getOpenFileName () во время отладки, программа выдает исключение.
Низший остановился, потому что это вызвало исключение.
Остановлен в потоке 0 по: Исключение в 0x745f7736, код: 0xc0000005: нарушение доступа для чтения в: 0x0, флаги = 0x0 (первый шанс).
Выпуск / отладка сборки не имеет значения. Если я запускаю отладчик, он вылетает. Если я не, это работает. Я попробовал кучу разных вещей, чтобы выяснить, почему это происходит — я переместил getOpenFileName в другую часть программы, я попытался изменить / удалить параметры при вызове функции, я сократил в основном весь мой код, кроме Минимальный минимум, необходимый для отображения этого диалогового окна файла — QApplication и главное окно, которое вызывало getOpenFileName () при нажатии на элемент меню. Ничего не получалось.
Затем я создал новый проект, который был в основном тем же самым. Необъяснимо-это сработало. Так что потом я много разобрался и копировал вещи из моего основного проекта, пока он снова не рухнул, и в итоге я обнаружил проблему: по-видимому, это имя исполняемого файла, заданное параметром «TARGET» в файле .pro. Если установлено PrimeWorldEditor (имя моего приложения), происходит сбой. Если я изменю это на что-то еще, это работает.
Поэтому моей первой мыслью было то, что были оставшиеся файлы, которые делятся своим именем с исполняемым файлом где-то, что вызывает проблемы. Однако очистка папки сборки, перестройка проекта и все остальное не помогает.
Я нахожусь в точке, где у меня закончились идеи о том, что может быть причиной проблемы, и я попытался и не смог найти с помощью поиска любые другие файлы, которые либо делятся своим именем с исполняемым файлом, либо указывают на него. Если у кого-то есть идея, в чем может быть проблема, я буду очень признателен за помощь. Я мог бы обойти это сейчас, изменив имя исполняемого файла, но я действительно хотел бы выяснить, почему это происходит, и исправить это.
РЕДАКТИРОВАТЬ: несколько человек просят код, так что вот пример программы, которая дает сбой. Еще раз, это происходит сбой только при запуске отладчика с целевым именем исполняемого файла, установленным в PrimeWorldEditor. При других обстоятельствах он работает должным образом и открывает диалоговое окно getOpenFileName ().
#include <QApplication>
#include <QFileDialog>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFileDialog::getOpenFileName();
return 0;
}
Я думаю, что проблема, скорее всего, связана с моей настройкой, поэтому я не уверен, что ее легко воспроизвести.
РЕДАКТИРОВАТЬ 2: Я хочу добавить, что я потратил некоторое время Googling, чтобы попытаться найти любую информацию, связанную с этой проблемой. Я нашел пару человек, которые, казалось, имели ту же проблему, что и я, как этот пост, но на этих постах не было никаких решений.
У меня была та же проблема, и решением было удалить программу git, которая сделала контекстное меню в проводнике Windows.
У меня возникла проблема, что программа зависала в отладчике Visual Studio 2013 при использовании QFileDialog::getOpenFileName()
:
Доступ к нарушению при чтении позиции 0xFEEEFEEE
Он не вылетал, когда я запускал программу без отладчика или когда я устанавливал параметр контекста объединения в конфигурации проекта -> отладчик ->
объединить с окружающей средой = «Нет».
Я переустановил Visual Studio, Qt и ничего не помогло.
Наконец, я удалил установленное в тот же день git-программное обеспечение и удалил его; затем программа перестала работать в Debugger.
Я использую 64-битный компьютер с Windows, но запускаю 32-битную программу Qt. У программного обеспечения git было контекстное меню в проводнике Windows, и это как-то мешало QFileDialog
и вызвал проблему.
Уххххх ты хорошо По какой-то причине я заметил DropboxExt_24 в моем стеке вызовов. Поэтому я удалил приложение Dropbox, и вдруг все работает правильно. Переустановил его, и все по-прежнему работает, так что проблема решена, я думаю?
Я размещал свой код на Dropbox, чтобы сохранить его резервную копию, не уверенный, было ли это связано с проблемой или нет.