Qt 5.2.1 QFileDialog GDB 奇怪的行为
Qt 5.2.1 QFileDialog GDB strange behaviour
我在 Windows 7 机器上使用 Qt 5.2.1 MinGW 32bit,gdb 来自 MinGW 4.8。
当我尝试单步执行代码时出现奇怪的行为。
QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName=open.getSaveFileName(this,tr("New File"),"",tr("Test File (*.tst)"));
if(fileName!="")
{
...
我在第一行设置断点。
单步执行直到第 3 行,然后在选择文件后,gdb 说:
Cannot insert breakpoint -1217.
Error accessing memory address 0x7219cd30: Input/output error.
当我在 if 或之后设置断点时,调试器会在断点处停止,但是当我在停止后尝试单步执行时,会发生同样的错误。
当我直接设置文件名时:
QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName="D:\path\to\File.tst";
if(fileName!="")
{
...
单步执行没有任何问题。
上面的代码运行没有任何问题,只有当我尝试单步执行时才会出现问题。
是否有人知道这个问题或合适的解决方法?
QFileDialog::getSaveFileName()
是一个静态函数,但是你调用它就像调用成员方法一样。
我只是在猜测,但您通过对象调用静态成员的方式可能会混淆您的调试环境 - 虽然编译器应该生成有效代码,因此 运行 对您的代码有效。
顺便说一句,setDefaultSuffix 不会按预期工作,因为 getSaveFileName 是静态成员,不会查看您的 QFileDialog 对象。
我在 Windows 7 机器上使用 Qt 5.2.1 MinGW 32bit,gdb 来自 MinGW 4.8。 当我尝试单步执行代码时出现奇怪的行为。
QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName=open.getSaveFileName(this,tr("New File"),"",tr("Test File (*.tst)"));
if(fileName!="")
{
...
我在第一行设置断点。 单步执行直到第 3 行,然后在选择文件后,gdb 说:
Cannot insert breakpoint -1217. Error accessing memory address 0x7219cd30: Input/output error.
当我在 if 或之后设置断点时,调试器会在断点处停止,但是当我在停止后尝试单步执行时,会发生同样的错误。
当我直接设置文件名时:
QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName="D:\path\to\File.tst";
if(fileName!="")
{
...
单步执行没有任何问题。
上面的代码运行没有任何问题,只有当我尝试单步执行时才会出现问题。
是否有人知道这个问题或合适的解决方法?
QFileDialog::getSaveFileName()
是一个静态函数,但是你调用它就像调用成员方法一样。
我只是在猜测,但您通过对象调用静态成员的方式可能会混淆您的调试环境 - 虽然编译器应该生成有效代码,因此 运行 对您的代码有效。
顺便说一句,setDefaultSuffix 不会按预期工作,因为 getSaveFileName 是静态成员,不会查看您的 QFileDialog 对象。