2016-03-02 56 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