したがって、これは非常に奇妙で、これについては非常に簡単な説明があるかもしれませんが、私は通常、VS 2010 の工場出荷時のデフォルト インストールで開発しないマシンを使用しています。以下に投稿されたコードは、まさに私が実行しているものです。 、そしてそれはこのおなじみのメッセージを引き起こしています:
Windows は、ProjectB.exe でブレークポイントをトリガーしました。
これは、ヒープの破損が原因である可能性があります。これは、ProjectB.exe または読み込まれた DLL のバグを示しています。
これは、ProjectB.exe にフォーカスがあるときにユーザーが F12 キーを押したことが原因である可能性もあります。
出力ウィンドウには、より多くの診断情報が表示される場合があります。
コードは次のとおりです。
#include <iostream>
#include <cstdlib>
using namespace std;
int main( int argc, char** argv )
{
system( "pause" );
return 0;
}
それでおしまい!ファイルは 1 つだけです。system( "pause" ) をコメントアウトしてもブレークはトリガーされませんが、プログラムの終了を止めることはできません (ご想像のとおり)。だから私は本当に混乱しています。これまでに経験したことがなく、なぜこれが問題を引き起こすのか理解できないので、これは私には本当に奇妙に思えます。プロセスを停止しない別のシステム コマンド (system( "cls" ) など) を使用しても、問題は発生しません。これは私が作業しているマシンに固有のものであるという傾向がありますが、よくわかりません。前もって感謝します!
どんな助けでも大歓迎です。
[編集]
したがって、これまで (少なくとも意図的に) 標準ヘッダーにデバッグしたことはありませんが、1 つのことに気付きました。
mscoree.dll__crtCorExitProcess
モジュールをロードするための呼び出しで、null ハンドルが返されます。これは、ロードされていないことを意味します。それが通常起こるかどうかはわかりませんが、そうすることで、exit proc 関数ポインターを取得するコードのブロックをスキップします。への呼び出しが呼び出されるのは、このメソッドが呼び出された後ExitProcess
であり、ブレークがトリガーされるのはここからです。
[編集2]
の呼び出し後、出力ウィンドウに
system( "pause" )
次のメッセージが表示されます。 .exe: Microsoft C++ 例外: >log4cxx::helpers::IOException メモリ位置 0x006ff344.. SPLogger: setFile(C:\ProgramData\Safend\Logs.18698\SPHook.log,true) 呼び出しに失敗しました。SPLogger: IO 例外: ステータス コード = 720005 SPLogger: [SPHookLog] という名前のアペンダーに出力ストリームまたはファイルが設定されていません。
そして、ExitProcess が呼び出されると、これが出力ウィンドウに追加されます。
スレッド 'Win32 スレッド' (0x1ca8) はコード 0 (0x0) で終了しました。HEAP[ProjectB.exe]: HEAP: 解放後に 21a4c10 で変更されたヒープ ブロック 21a4ba8 を解放する
これは私にとって興味深いものです。