我在使用MinGW 4.8的gdb的Windows 7机器上使用Qt 5.2.1 MinGW 32bit。 当我尝试单步执行代码时,有一种奇怪的行为。
QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName=open.getSaveFileName(this,tr("New File"),"",tr("Test File (*.tst)"));
if(fileName!="")
{
...
我在第1行设置断点。 单步操作直到第3行,而不是在选择文件后,gdb说:
无法插入断点-1217。 访问存储器地址0x7219cd30时出错:输入/输出错误。
当我将断点设置为if或after时,调试器会在断点处停止,但是当我在停止后尝试单步执行时,会发生同样的错误。
当我直接设置FileName时:
QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName="D:\path\to\File.tst";
if(fileName!="")
{
...
Singlestepping没有任何问题。
上面的代码运行没有任何问题,只有当我尝试单步执行时才会出现问题。
有谁知道这个问题,或者是否有合适的解决方法?
答案 0 :(得分:1)
QFileDialog::getSaveFileName()
是一个静态函数,但您将其称为成员方法。
我只是猜测,但可能你通过对象调用静态成员的方式会混淆你的调试环境 - 编译器应该生成有效的代码,因此运行你的代码会有效。
BTW,setDefaultSuffix将无法正常工作,因为getSaveFileName是一个静态成员,不会查看你的QFileDialog对象。