1

昨日新しい PC を組み立てたので、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.

ただし、デバッガーなしでこのアプリケーションを実行すると、リリース バージョンとデバッグ バージョンの両方で問題なく動作します。

ターミナル サービスを有効にする手がかりはインターネット上にいくつかありますが、Windows 8 にはそのようなサービスはないようです。

誰が私が何をチェックすべきか手がかりを持っていますか?

編集

ウィジェットを他のアプリケーションに移動してもエラーは発生しなかったため、明らかに、ウィジェット (かなり小さい -QWebViewとのみQProgressBar) で問題ありません。しかし、このウィジェットをメイン関数で表示すると、次のようになります。

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

同じエラーでまだ失敗しています。コールスタックを調べて(エラーが表示された場合はあまり役に立ちません)、関数呼び出しにステップインすると、エラーをretval = HeapFree(_crtheap, 0, pBlock);in function _free_base、 in fileまで追跡しましたfree.cそして、関数は関数から呼び出されdbgdel.cpp、関数から_free_dbg( pUserData, pHead->nBlockUse );呼び出されているunlock()ようです。

デバッガーを既にアクティブなプロセスに接続しても、同じエラーが発生します。

ここで多くのサードパーティのライブラリをリンクしているので、アイデアがなくなったので、それらなしで試してみます...

編集2:

この例外をプログラムに渡すと、問題なく動作しているように見えます。

編集 3

setUrl 行にコメントを付けると、関数が呼び出される のどこかで同じ例外が発生しQWebKitますstrdup...

4

1 に答える 1

4

さて、これは簡単でしたが、解決するのに2か月かかりました(その間のエラーを無視しました)。

これは未処理の例外ではありませんでした。これは処理された例外であり、アセンブリコードにステップインしてスタックフレームを監視すると、この例外が処理されたことがわかりました。

次に、すべてのC++およびWin32例外が発生したときにデバッガーを中断するように設定したことを思い出しました。デバッガー設定をリセットすると、問題が解消されました。

于 2013-03-10T20:00:29.510 に答える