2011-07-28 17 views
2

これはあいまいな質問ですので、漠然とした(しかしうまくいけば役立つ)回答を期待しています。ビジュアルスタジオのC++のデバッグに役立ちます

私はVisual StudioでC++およびデバッグ時に新しいですし、どのような最も私を失望コールスタックをどのように解釈するかである...

だから私の質問は、私がエラーに見ているかについて、具体的ですスタックの上部。これは何を示すべきですか?誰かが、スタックの破損を引き起こしているコードに例外がスローされていることを示唆しました。これは、コールスタックの__FrameUnwindFilter(_EXCEPTION_POINTERS * ...)行で示されます。ここで起こっていることをどのように解釈するのですか?私はおそらく気にしないほどのものがあります。そして、その上に、「フレームが間違っているかもしれません」という警告があります。その意味は何ですか?私はそれらの行を全く信用できないのですか?なぜ最初にそれを表示するのですか?また、スタックフレームの一番下にdddddddd()があるのはなぜですか?

私を助けてください - 私はスタックの解釈方法に関する一般的なアドバイスとヒントを探しています。

おかげで、一つの特定のエラーで

JBU

、私が見たものである。

mscvcr90d.dll!_NMSG_WRITE(...) Line ### 

mscvcr90d.dll!abort() Line ## + 0x7 bytes 

mscvcr90d.dll!terminate() Line ### 

mscvcr90d.dll!__FrameUnwindFilter(_EXCEPTION_POINTERS* ...) Line #### 

mscvcr90d.dll!__FrameUnwindToState(EHRegistrationNode * ...) Line ### 

[email protected][email protected]() + 0x12 bytes 

ntdll.dll!7c9032a8() 

[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 

ntdll.dll!7c90327a() 

ntdll.dll 

ntdll.dll 

kernel32.dll 

kernel32.dll 

kernel32.dll 

Other Library 

Other Library 

FINALLY MY LIBRARY CODE HERE 

END OF MY LIBRARY CODE 

a whole bunch of other libraries here that I haven't heard of 

dddddddd() 

答えて

2

あなたは私があなたの問題ではなく、私のお手伝いをしたいhereをデバッグするためのヒントを必要とするだけでなく場合私はあまりにも自分自身が問題を抱えていないと確信していると私は本当にエラーログから教えてくれる

+0

おかげ – jbu

2

あなたはこのkを見てリリースで実行されていますもののind?デバッグビルドは、コールスタックに関するより有用な情報を提供します。この情報は、必要に応じてリリースビルドのプロジェクトプロパティで有効にすることもできます(デバッグ情報形式、と思います)。その情報(ntdllのようにビルドしていないDLLを含む)がなければ、ライブラリ名と仮想アドレスのみを伝えることができます。

アンワインドは、エラーが原因で例外が発生したことを通知します。出発点として、例外処理が十分で情報量が豊富であり、うまくいけば、エラーに関するより貴重な情報を収集できると考えてください。

残念なことに、スタックを破損していると、間違っていてコード内の "エラーを指摘"するだけで意味がありません。これは、呼び出しスタックにはまともな起源がないことがよく分かります(あなたの例とは異なります)。

+0

デバッグ偉大なリンクを、...持っていますデバッグ – jbu

+0

デバッグビルドではないようです。設定から「デバッグ」を選択し、VSデバッガ自体からデバッグを開始します。あなたが持っている他のライブラリ/ DLLのセットは? – Ajay

2

ここでは2つのことがあります。

最初は、スローされたSEH例外があるようです。これはFrameUnwindToFilterコールによって示されます。コールスタックから何が例外が発生しているかを正確に言うのは難しいです。あなたはそのフレームに移動し、それらのうちの1つのパラメータを見て例外コードを持つ必要があります。

「フレームが正しくない可能性があります...」という2番目の項目は、シンボルが存在しないネイティブDLLをデバッグするときにこのメッセージを表示します。シンボルがないと、ネイティブデバッガがコールスタックを正確に判断するのが難しく、時には不可能になります。それは推測するように強制するため、警告が「間違っている可能性があります」

これは問題のDLLのシンボルを読み込むことで修正できます。この場合、nt.dllとkernel32.dllです。これらは、シンボルが公開されているMicrosoft所有のDLLです。わからないすべての依存ライブラリがでもある場合にかかわらず、次のMDNのページには、お使いのマシン上のパブリックシンボル設定を取得する方法の詳細について

関連する問題