6

したがって、これは非常に奇妙で、これについては非常に簡単な説明があるかもしれませんが、私は通常、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 を解放する

これは私にとって興味深いものです。

4

1 に答える 1

1

ここでの問題は、特定の DLL のロードを妨げたり、コードを挿入して悪意のある命令の実行を防止したりするセキュリティ ソフトウェアが実行されていることだと思います。これは個人のマシンでは経験したことがなく、多くのセキュリティ管理が行われている企業のボックスでしか経験していないので、それだと思います。予期しない結果をもたらすものは他にないため、ランタイムの不一致であるとは思えません。潜在的な問題についてコメントしてくださった皆様、ありがとうございます。他にも潜在的な問題が議論されているため、この問題が発生している場合はコメントを読んでください。

于 2013-09-16T15:56:26.860 に答える