昨天我已经组装了我的新PC,我决定试试Windows 8。但是,今天,在中等Qt应用程序的调试过程中,调试器在一个非常简单的行上产生了“Invalid Binding Handle”错误消息(这是由Qt的moc.exe自动生成的行:
// QWebView *view (...)
view->setUrl(QUrl(QString::fromUtf8("about:blank")));
// Failing in setUrl call, not in QUrl constructor, or in fromUtf8 function.
但是,在没有调试器的情况下运行此应用程序在Release和Debug版本中都可以正常工作。
我在互联网上有一些线索可以启用终端服务,但似乎Windows 8中没有这样的服务。
有没有人知道我应该检查什么?
修改
将窗口小部件移动到其他应用程序中没有产生任何错误,显然,窗口小部件(非常小 - 只有QWebView
和QProgressBar
)很好。但是,当我在我的主要功能中显示这个小部件时:
QApplication app(argc, argv);
MyWidget w;
w.show();
return app.exec();
它仍然失败并出现同样的错误。检查调用堆栈(出现错误时不是很有帮助)并单步执行函数调用,我在函数retval = HeapFree(_crtheap, 0, pBlock);
中跟踪错误下降到_free_base
,文件free.c
似乎函数从dbgdel.cpp
调用,函数_free_dbg( pUserData, pHead->nBlockUse );
,并从unlock()
函数调用。
将调试器附加到已经处于活动状态的进程仍然会产生相同的错误。
我在这里链接了很多第三方图书馆,所以我会在没有他们的情况下尝试,因为我的想法已经用完......
编辑2:
如果我将此异常传递给程序,它似乎运行正常。
编辑3
注释setUrl行会在QWebKit
中的某处引发相同的异常,其中strdup
函数被调用...
答案 0 :(得分:4)
嗯,这很简单,但我花了两个月才解决(同时忽略错误)。
这不是一个未处理的异常 - 这是处理异常,并且进入汇编代码并观察堆栈帧告诉我这个异常已被处理。
然后我记得当引发所有C ++和Win32异常时,我已设置调试器中断。重置调试器设置消除了这个问题。