2016-03-02 63 views
0

我在MinGW 4.8的gdb上使用Windows 7机器上的Qt 5.2.1 MinGW 32bit。 当我尝试通过代码单步执行时,会出现一个奇怪的行为。Qt 5.2.1 QFileDialog GDB奇怪的行为

QFileDialog open; 
open.setDefaultSuffix("tst"); 
QString fileName=open.getSaveFileName(this,tr("New File"),"",tr("Test File (*.tst)")); 
if(fileName!="") 
{ 
... 

我在第一行设置了一个断点。 Singlestepping的工作,直到第三行,比选择文件后,gdb说:

无法插入断点-1217。 访问内存地址0x7219cd30时出错:输入/输出错误。

当我设置断点insede的时候,如果或之后,调试器停止在断点,但是当我尝试在停止后单独步时,发生同样的错误。

当我直接设置文件名,如:

QFileDialog open; 
open.setDefaultSuffix("tst"); 
QString fileName="D:\path\to\File.tst"; 
if(fileName!="") 
{ 
... 

Singlestepping工作没有任何问题。

上面的代码运行没有任何问题,只有当我尝试singlestep时才会出现问题。

有谁知道这个问题,或者一个合适的解决方法?

+0

问题可能发生在'open.getSaveFileName()',它打开一个阻止执行到下一行的模态对话框if(fileName!=“”)...'。我也会在第四行放置一个断点,以便在选择文件时停止。 – vahancho

+0

我试过了。但是当我在第4行放置一个断点(或更晚的时候,我在if中做了很多事情)时发生同样的错误。 @vahancho – Haselnussstrauch

回答

1

QFileDialog::getSaveFileName()是一个静态函数,但你称它为一个成员方法。 我只是猜测,但可能你通过一个对象调用一个静态成员的方式混淆了你的调试环境 - 编译器应该生成有效的代码,所以运行你的代码将工作。

顺便说一句,setDefaultSuffix将无法按预期工作,因为getSaveFileName是一个静态成员,并且不会查看您的QFileDialog对象。

+0

谢谢你的回答,我会试一试 – Haselnussstrauch