3

外部の .dll を呼び出す Windows アプリケーションがあります。しばらくすると、ユーザーのマーシャリングに関係する致命的なエラーが発生しました。その特定のエラーで、ターゲットを AnyCPU ではなく x86 に変更するというソースがオンラインにありました。私はそうしましたが、アプリを実行させるたびに、デバッグ モードが終了し、アプリケーションがクラッシュします。しかし、.dll 呼び出しの直後にブレーク ポイントを設定し、アプリケーションの制御を再び取得するまで各行をステップ オーバーすると、アプリケーションはクラッシュしません。これを引き起こしている可能性のある特定のものはありますか?この問題をデバッグしていますか?

ありがとう!

4

3 に答える 3

1

問題を解決するコードのステッピングは、多くの場合、元のコードのタイミングの問題の兆候です。外部リソースが非同期で読み込まれる場合、デバッガーの現在のスレッドのスタックには表示されませんが、呼び出すことはできます。コードをステップ オーバーすると、フローの遅延が発生します。

于 2012-08-14T21:26:41.830 に答える
0

この種のことの最も一般的な原因は、初期化されていない変数であると考えています。それらはメモリ内にあったものをすべてピックアップし、デバッガーの存在により、スタックの未使用部分 (次のルーチンが呼び出されたときにローカル変数になるメモリ) にあるものを簡単に変更できます。DLL コードを確認します。

あなたの「修正」により、これが本当の答えであるとさらに疑われることに注意してください。

(それから、デバッガーに問題があるという非常にクレイジーなケースもあります。ずっと前に、シングル ステップの場合、デバッガーが無効な値をセグメント レジスタに問題なくロードするケースに遭遇しました。)

于 2012-08-16T20:38:09.010 に答える
0

ご提案いただきありがとうございます!幸いなことに、私はそれを機能させることができました (なぜ機能するのかについての理解は最小限でした) が、ビルド ターゲットを「AnyCPU」ではなく、特に x86 マシンに変更しました。これは Web サイトによって提案されたもので、もう見つかりません :\ これが、同様の問題に遭遇するよりも他の人に役立つことを願っています!

于 2012-08-16T18:40:37.730 に答える