调试时QFileDialog :: getOpenFileName崩溃,显然是由项目名称引起的?

时间:2014-08-12 17:29:51

标签: c++ qt debugging getopenfilename

我遇到了一个令我困惑的问题。我在Windows 7上使用Qt Creator 3.1.2和Qt 5.3,使用MSVC 10.0编译器和Windows 8.1调试工具中的CDB。 (不确定我是否应该寻找特定于Windows 7的调试器,但直到现在我还没有遇到任何问题。)

问题:当我在调试时尝试使用QFileDialog :: getOpenFileName()时,程序会抛出异常。

  

下级因为引发了异常而停止了。

     

在线程0中停止:异常位于0x745f7736,代码:0xc0000005:读访问冲突位于:0x0,flags = 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:我想补充一点,我确实花了一段时间谷歌搜索试图找到与该问题相关的任何信息。我确实找到了几个与我有同样问题的人,like this post,但这些帖子上没有任何解决方案。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,解决方案是卸载git软件,它在Windows资源管理器中创建了上下文菜单。

我在使用QFileDialog::getOpenFileName()时遇到了Visual Studio 2013 Debugger程序崩溃的问题:

  

读取位置0xFEEEFEEE

时访问冲突

当我在没有调试器的情况下运行程序或在项目配置中设置组合上下文选项时,它没有崩溃 - &gt;调试器 - &gt; 结合环境=&#34;否&#34;。

我重新安装了Visual Studio,Qt并没有任何帮助。

最后我删除了当天安装的git-software并卸载了软件;然后程序再也没有在Debugger中崩溃了。

我使用的是Windows 64位计算机,但是使用32位运行Qt程序。 git软件在Windows资源管理器中有一个上下文菜单,并以某种方式干扰了QFileDialog并导致了问题。

答案 1 :(得分:1)

哇,哇,好的。出于某种原因,我在调用堆栈中注意到了DropboxExt_24。所以我卸载了Dropbox应用程序,突然间,一切正常。重新安装它,一切仍然有效,所以问题解决了,我猜?

我一直在Dropbox托管我的代码以保持备份,不确定这是否与问题有关。