none
バッファ オーバーランしている原因究明の仕方について RRS feed

  • 質問

  • VS2005 VC++で開発中です。

    今、Release版のみで
    ”バッファ オーバーランが CrosPathEditor.exe で発生し、プログラムの内部状態を破損しました。[中断] をクリックしてプログラムをデバッグするか、または [続行] をクリックしてプログラムを終了してください。”
    というエラーがでてアプリケーションが終了してしまう現象が起きていて困っています。

    デバッグ版でエラーが起きないため、何処が悪いのかが分かりません。
    究明の仕方をご教授願えますでしょうか。

    よろしくお願い致します。
    2009年10月7日 6:07

回答

  • 以下のようにリリースビルドをデバッグしてはいかがでしょうか?

    方法 : リリース ビルドをデバッグする
    http://msdn.microsoft.com/ja-jp/library/fsk896zz.aspx

    2009年10月7日 7:51
  • こんにちわ。ミッヒーといいます。

    本格的な確認をするのであれば、ダンプを出力して、となるのでしょうが、そこからバグを探すのも慣れが必要ですよね・・・。
    ダンプ出力からのバグ探しは私も不得手なので、他の方のフォローを期待しつつ、とりあえずのアドバイス的なものを。

    Release 版と Debug 版では関数呼び出し時のレジスタ値の扱いが異なります。

    Debug 版では関数内部でのスタック破損への対処として、全レジスタ値がスタックに保存され、関数終了と同時にレジスタ値の復帰が行われるはずです。この処理は、安全性の為に付けられているので、当然 Release 版では存在しない命令になります。

    言い換えれば、Debug 版で既にバッファオーバーランが起きているが、レジスタ保護処理が入っている為に正常動作している、という状況だと思います。

    プログラム内でバッファオーバーランが発生していないかの再確認と、メモリ操作部分の再確認、ぐらいでしょうか・・・。
    2009年10月7日 7:13

すべての返信

  • こんにちわ。ミッヒーといいます。

    本格的な確認をするのであれば、ダンプを出力して、となるのでしょうが、そこからバグを探すのも慣れが必要ですよね・・・。
    ダンプ出力からのバグ探しは私も不得手なので、他の方のフォローを期待しつつ、とりあえずのアドバイス的なものを。

    Release 版と Debug 版では関数呼び出し時のレジスタ値の扱いが異なります。

    Debug 版では関数内部でのスタック破損への対処として、全レジスタ値がスタックに保存され、関数終了と同時にレジスタ値の復帰が行われるはずです。この処理は、安全性の為に付けられているので、当然 Release 版では存在しない命令になります。

    言い換えれば、Debug 版で既にバッファオーバーランが起きているが、レジスタ保護処理が入っている為に正常動作している、という状況だと思います。

    プログラム内でバッファオーバーランが発生していないかの再確認と、メモリ操作部分の再確認、ぐらいでしょうか・・・。
    2009年10月7日 7:13
  • 以下のようにリリースビルドをデバッグしてはいかがでしょうか?

    方法 : リリース ビルドをデバッグする
    http://msdn.microsoft.com/ja-jp/library/fsk896zz.aspx

    2009年10月7日 7:51
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    ミッヒーさん、Atsushi777さん、いつもお世話になっております。

    msdn.kikiさん、初めまして。
    MSDNフォーラムのご利用ありがとうございます。

    すこし間があいたのですが、その後如何でしょうか?

    もし良ければ、こちらのデバックツールも使ってください。

    Windows 用デバッグ ツール
    http://www.microsoft.com/japan/whdc/devtools/debugging/default.mspx

    今回ミッヒーさん、Atsushi777さんからの投稿が有用な情報だと思いましたので、
    勝手ながら、回答マークを付けさせてもらいました。
    問題が解決していないときは、詳しい状況を伝えて頂ければと思います。

    今後ともMSDNフォーラムをよろしくお願いします(^-^)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年10月20日 9:15