1. ホーム
  2. c++

[解決済み] リリースビルドでプログラムがクラッシュする -- デバッグの方法は?

2022-12-11 09:33:18

質問

私のプログラム (実際には私のプログラムのためのテストスイートですが、それでもプログラム) はクラッシュしますが、リリース モードで構築されたときのみ、そしてコマンドラインから起動されたときのみです。 原始的なデバッグ (つまり、いたるところにある厄介な printf() メッセージ) を通じて、私はコードがクラッシュしているテスト メソッドを決定しました。

Visual Studio の内部でこのプログラムを実行しようとすると、クラッシュしません。 WinDbg.exe から起動した場合も同様です。 クラッシュは、コマンド ラインから起動したときのみ発生します。 これは Windows Vista で発生しており、残念ながら今は XP マシンにアクセスできないので、テストできません。

Windows でスタック トレースを出力できれば、本当に素晴らしいことです。

何か

を表示させることができれば本当に良いのですが、単にプログラムがきれいに終了したかのように終了させるだけではありません。 どなたか、ここでもっと意味のある情報を取得し、できればこのバグを修正する方法についてアドバイスがありますか?

編集: この問題は、確かに境界外配列が原因でした。 この投稿で詳しく説明しています。 . この問題を発見してくれた皆さん、ありがとうございました。

どのように解決するのですか?

C または C++ プログラムをデバッガーで正常に実行し、外部で実行すると失敗するという、私が見聞きした 100% のケースで、原因は関数のローカル配列の最後を越えて書き込んだことでした。(デバッガーはスタックに多くのものを置くので、重要なものを上書きする可能性は低くなります)。