私は非常に奇妙な問題があります。当社のアプリケーションは、C++で書かれたVisual Studio 2017でコンパイルされたデスクトップアプリケーションです。ここ数週間は、アプリケーションがmainに入る前にクラッシュすることがあります。私はそれを知っている。なぜなら私はメインの最初の行にブレークポイントを置くので、決して呼び出されないからだ。クラッシュはすばやく起こるわけではないので、私は診断ツールでブレークを押す時間があります。しかし、私はあなたのアプリケーションがブレーク状態に入ったというメッセージしか出ませんでしたが、すべてのスレッドが外部コード(通常はシステムコードまたはフレームワークコード)を実行していたので表示するコードはありません。時には、すべてのものを掃除して再構築してコードを動作させることもありますが、しばしばそうではありません。メインに入る前にプログラムがクラッシュした場合の対処方法
私はこれを調査する方法を知らず、コードは数年前にこの問題を抱えていませんでした。
どうすればいいですか?
編集
提案し、私はのWinMainCRTStartupにブレークポイントを設定し、私は224の機能__scrt_common_main_seh行目に問題をトレースとして()exe_common.inl中:
(_initterm_e(__ xi_a場合、__xi_z)=! 0) return 255;
その行が失敗したので、関数は255を返し、私のメインは呼び出されません。それ以上のアイデアは?
*任意の*クラッシュのために行う通常のことは、デバッガでそのコードをキャッチし、コードのどこに発生するかを特定することです。もしあなたのコードから出てこないのであれば、Windowsはプロセスごとにデフォルトの1メガバイトのスタックしか持っていないので、 'main'関数で大きな配列を探すべきです。多くのまたは大きなローカル変数(配列を含むローカル変数は通常スタックに格納される)のためにスタックオーバーフローが発生します。 –
大きな配列を*持っていなければ、デバッガはクラッシュを捕らえて、大域変数の初期化を指しているはずです。 –
私がチェックするオプションの1つは、いくつかの欠けている依存関係です。すべての依存DLLがある場合、作業ディレクトリが正しく設定されているかどうかを確認します。 – Dusteh