1

混合コードを使用した製品で想定されるリソースリークを報告しているお客様がいます。そこで、実際に何が起こっているのかを確認するためにデバッグしたかったのです。Visual Studioがクラッシュしたり、コードのステップスルー中にフリーズしたり、デバッガーが不正な終了コードでランダムなポイントで停止したりするなどの奇妙な問題が発生しています。

それを引き起こしているアンマネージ関数に絞り込みました。これは、メインスレッドではなく別のスレッドから開始された関数です。私はそれを引き起こす正確なコード行があると思い続けていますが、問題の場所は変わり続けているようです。そこで、問題の一般的な場所にたどり着き、アセンブリコードを1行ずつステップ実行し始めました。

ブレークポイントを関数が最初に開始する場所に移動し、デバッガーがそのポイントに到達するとブームになり、それを超えると終了します。代わりにブレークポイントを関数に20行設定すると、実行はそのポイントに到達し、それを通過してデバッガーが終了するため、関数が{内で実際に実行していることとは実際には何の関係もないと思います。 }。

F10でこれを行うと、デバッガーが停止し、終了コードがSTATUS_WX86_BREAKPOINTになります。これを、F11で行うと、終了コードSTATUS_WX86_SINGLE_STEPで停止します。エラーコードの名前は、ステッピングのタイプに基づいて私には意味がありますが、何が問題なのかは実際にはわかりません。もう一度実行するときは、逆アセンブルでブレークポイントを移動して、前に何が起こったかを確認します。終了は先に行われるため、非常に面倒です。私はこれまでにこのようなものに遭遇したことがなく、このエラーが実際に私が間違っていることを意味することについて多くを見つけることができませんか?

時々、悪いコードで終了する代わりに、VisualStudioは単に私をロックします。

4

1 に答える 1

0

@paddyのコメントに同意する傾向がありますが、問題は別のスレッドからのもののようです。VSを最初のチャンスの例外で停止するように設定しましたか?
あなたの場合、それはアンマネージコードなので、win32例外とC ++例外(それらすべて)で停止するようにデバッガーを設定します。
わからない場合は、デバッグメニュー->例外...からそれを行うことができます。

于 2012-10-24T20:34:59.273 に答える