2

作業中のマシン(win7 VS2010 Ultimate sp1)で実行する場合

int main()
{
    unsigned i = 5;
    i %= 0;
    return 0;
}

また

int main()
{
    int * ip = 0;
    *ip = 4;

    return 0;
}

未処理の例外がゼロで整数除算されます。ブレークボタンを押すと、問題を確認するために、コールスタックにはmsvcrt100dとntdllのみが含まれ、VisualStudiomlock.cはそのLeaveCriticalSection( _locktable[locknum].lock );行のファイル内でブレークします。

このコードを別のマシン(win7 VS2010 proff sp1)で実行すると、VSは問題のある行i %= 0;odで正確にコードを壊し*ip = 4ます。

この間違いは私のプロジェクトのどこかに隠されていて、別のマシンで実行するまで見つけることができませんでした。この動作を修正するにはどうすればよいですか?作業中のマシンで確認する必要があります。

Windows 7、Visual Studio 2010、およびVS-SP1のクリーンインストールがあります。私のプロジェクトは台無しにされるべきではありません。私はCMakeと、動作していないマシンで正常に動作している同じプロジェクトを使用して生成します。

アドバイスをいただければ幸いです。

4

2 に答える 2

0

VS でプログラムをコンパイルすると、プログラムのすべての関連デバッグ情報を含む EXE ファイルと PDB ファイルが作成されます。また、EXE に埋め込まれている場合は、PDBの絶対パス。

EXE がクラッシュし、VS を使用してデバッグすると、EXE と同じフォルダーとファイルに埋め込まれた絶対パスの両方で、対応する PDB を見つけようとします。プログラムをデバッグできるようにする場合は、EXE とともに PDB をコピーする必要があります。これら 2 つのファイルは、まったく同じコンパイルで作成されたものでなければならないことに注意してください。

次に、VS デバッガーは、PDB に埋め込まれたファイル*.cまたはファイルの絶対パスを使用して、プログラムのソースを表示しようとします。*.cpp明らかに、関連する行で停止したい場合は、ソースのコピーが必要です! ソースを元のマシンとまったく同じパスにコピーすると、問題なく動作するはずです。そうでない場合は、 [コール スタック] ウィンドウを開き、関数をダブルクリックするmainと、実際のソースを参照するように求められます。

それとも設定がおかしくなった...

于 2013-02-20T15:36:32.117 に答える