2012-03-07 9 views
1

私は巨大なコードベースを持つQt C++アプリケーションを持っています。私はアーキテクチャに親しんでいますが、コードの多くは分かりません。アプリケーションが閉じられるたびに、それは「app.exeのは、ブレークポイントをトリガしました」と、私は続けるヒットした場合、私はapp.exeの中0x6701c95d(QtCored4.dll)でapp.exeがブレークポイントをトリガした後、アクセス違反の書き込み場所

」未処理の例外を取得したメッセージを示しています。 0xC0000005:アクセス違反の書き込み場所0x0c3e9fd8。 "私はアプリの検証がフックアップし、それは私の質問はどのように1だろう、です

=========================================================== 
VERIFIER STOP 0000000000000013: pid 0x2654: first chance access violation for current stack trace 

    000000000C3E9FD8 : Invalid address being accessed 
    000000006701C95D : Code performing invalid access 
    000000000008EB40 : Exception record. Use .exr to display it. 
    000000000008E650 : Context record. Use .cxr to display it. 
=========================================================== 
This verifier stop is continuable. 
After debugging it use `go' to continue. 
=========================================================== 

出力ウィンドウでこれをダンプ持ってこの

enter image description here

のように見えるスタックトレースを

この問題の原因を突き止めるためにデバッグしようとしていますか?私はアンマネージドプログラミングの世界で多くの経験を持っておらず、私は完全に失われています。どんな助けでも大歓迎です。

+1

ほとんどの可能性がありますか?私は推測していますが、あなたが実際に書いたものに到達するまでコールスタックを下ります。デストラクタの呼び出しを考えると、Qtがオーナーシップを取った何かを実際に削除していると思います。 – Bart

答えて

1

デバッガが接続されていて呼び出しスタックが表示されているため、スタックを歩き、変数が正しい状態になっているかどうかを調べることができます。

ここでのクラッシュは、アクセスしようとしているポインタが間違っているためです。

ソースコードはありますか?もしそうなら、QTの完全なpdbsを持っているように見えるので、これは比較的単純であるはずです。それは、正しく解決されたシンボルと行番号を表示しているからです。

また、WinDbgを試すこともできますが、これは学習に時間がかかる非常に高度なデバッガです。

私はデバッガが既に接続されており、メモリウィンドウ/ locals/autosを見て変数値を調べると便利な情報が表示されていると思いますが、これらのポインタの1つnullまたは初期化されません。

コールスタックを見ると、QCursorオブジェクトが表示され、デバッグセッションが有効になっている場合は、オブジェクト上にカーソルを置くと、現在の値が表示されるポップアップウィンドウが表示されます。値またはアドレスnullまたは無効です。

2

バッファオーバーフローやダングリングポインタのダブル削除のいずれかによってメモリが破損する可能性があります。このようなことは、QObjectの親がQObjectの所有権を持っていることを認識していないとQtコードを呼び出すときに発生します。あなたはすでにApp Verifierを使用していますが、Windows用デバッグツールからgflagsを実行して、Page Heap debuggingを有効にすると、問題のローカライズに役立ちます。

関連する問題