1

我昨天组装了我的新电脑,我决定试试 Windows 8。然而,今天,在调试适度的 Qt 应用程序期间,调试器在一个非常简单的行上产生了“无效的绑定句柄”错误消息(这是由 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 中没有这样的服务。

有人知道我应该检查什么吗?

编辑

将小部件移动到其他应用程序不会产生任何错误,因此显然,小部件(非常小 - 只是QWebViewQProgressBar)很好。但是,当我在我的主要功能中显示这个小部件时:

QApplication app(argc, argv);
MyWidget w;
w.show();
return app.exec();

它仍然失败并出现相同的错误。检查调用堆栈(当出现错误时这不是很有帮助)并进入函数调用,我已经将错误跟踪到retval = HeapFree(_crtheap, 0, pBlock);in function _free_base, in filefree.c而且似乎函数是从dbgdel.cpp函数调用的,_free_dbg( pUserData, pHead->nBlockUse );它是从unlock()函数调用的。

将调试器附加到已经活动的进程仍然会产生相同的错误。

我在这里链接了很多 3rd 方库,所以我会尝试不使用它们,因为我的想法已经用完了......

编辑2:

如果我将此异常传递给程序,它似乎运行良好。

编辑 3

评论 setUrl 行在某处引发了相同的异常QWebKit,其中strdup函数被调用...

4

1 回答 1

4

好吧,这很容易,但我花了两个月才解决(同时忽略了错误)。

这不是未处理的异常 - 这是已处理的异常,进入汇编代码并查看堆栈帧告诉我此异常已处理。

然后我记得我已经将调试器设置为在引发所有 C++ 和 Win32 异常时中断。重置调试器设置消除了该问题。

于 2013-03-10T20:00:29.510 回答