0

私が開発しているアプリケーション(C#/ XNAで記述されたゲーム)は、Microsoft Visual Studio(2010)内から起動した場合と、MSVSの外部(Windowsエクスプローラーなど)から起動した場合とで動作が異なる場合があります。具体的には、MSVS内では発生しないエラー(例外が描画される)が発生することがあります。

この違いの理由は何でしょうか?理想的には、MSVSにアプリケーションをできるだけ厳密にチェックさせて、開発中にすべてのバグが実際に発生する(そして修正できる)ことを確認できるようにする方法があります。

この問題は、リリースモードとデバッグモードの両方で発生します。ゲームは多数の外部dll(nuclex lib、sharp dx)を使用しますが、これらのlibはすべてMSVSの内部と外部の両方から使用されます。ゲームは完全にシングルスレッドで実行されます。

質問は、デバッグする必要のある特定のエラーに関するものではなく、アプリケーションの起動方法から発生する可能性のある一般的な違いに関するものであることに注意してください。

4

1 に答える 1

2

Visual Studio で実行すると、プログラムの動作が異なる主な原因が 2 つあります。

まず、Visual Studio のホスティング プロセスです。デフォルトでは無効になっていると思います。ただし、必要に応じて、アプリケーション プロジェクトのプロパティの [デバッグ] タブにトグルがあります。

2 つ目は、デバッガーがアタッチされている場合、.NET JIT が別の、よりデバッグしやすいマシン コードを生成するという事実です。この動作を無効にするには、[ツール] -> [オプション] -> [デバッグ] -> [一般] で [モジュールのロード時に JIT 最適化を抑制する (管理対象のみ) ] チェックボックスをオフにします。

このオプションを無効にしてから、デバッガーでゲームを実行して、同じエラーが発生するかどうかを確認してみてください。もちろん、これを無効にすると、プログラムのデバッグが大幅に難しくなりますが、このような場合には役立ちます。

コメントで述べたように、この種の問題がコード生成に関連することはほとんど聞いたことがありません (ただし、理論的には可能だと思います)。パフォーマンスの変化によって引き起こされる潜在的なスレッドのバグが発生する可能性ははるかに高くなります。また、動作の悪いネイティブ ライブラリである可能性もありますが、これも異常です。

于 2013-01-15T03:10:21.177 に答える