调试时“无效的绑定句柄”

时间:2013-01-27 20:04:38

标签: visual-studio-2010 qt windows-8

昨天我已经组装了我的新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中没有这样的服务。

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

修改

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

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函数被调用...

1 个答案:

答案 0 :(得分:4)

嗯,这很简单,但我花了两个月才解决(同时忽略错误)。

这不是一个未处理的异常 - 这是处理异常,并且进入汇编代码并观察堆栈帧告诉我这个异常已被处理。

然后我记得当引发所有C ++和Win32异常时,我已设置调试器中断。重置调试器设置消除了这个问题。