ここから本文です

デバッグとリリースの違いを教えてください。

dqb********さん

2010/3/2319:01:21

デバッグとリリースの違いを教えてください。

いろいろ調べたところ、あいまいですが、デバッグはバグを見つけるためにいろんな作業を行うためサイズが大きくなり速度が遅くなり、リリースはそれがないから速いというようなことだったんですが、具体的になにが違うんでしょうか?
また、それらは同じプログラムで何回も変更できるのでしょうか?1回デバッグでコンパイルしたらリリースではコンパイルできないとかはありますか?
visual studio2008でC言語でプログラムを行っています。

閲覧数:
53,336
回答数:
4

違反報告

ベストアンサーに選ばれた回答

ogd********さん

2010/3/2320:29:13

プログラミングの最終目標は
「バグのないリリース版」を作成することです。

ここで「バグ」とは「仕様通りに動かない」ことであり、
エラーで停止するとかハングアップすると言うばかりでなく、
動作が不安定とか一切を含みます。

プログラムが一発で仕様通りに完全に動くことはまずありません。
大抵バグを含みます。

バグの原因を調査する為に使われるのがデバッグ版なのです。

リリース版では、通常最適化が行われます。
リリース版がデバッグ版に比し高速なのは
ほとんどがこの最適化のお陰です。

現在の最適化は非常に強力です。
時には、ソースコードと順番を入れ替えたりします。
しかし、その結果、
最適化されたプログラムはソースとの対応関係が
ぐちゃぐちゃになることもあり、
これではプログラマがソースを追えません。

そこで、デバッグ版では通常最適化を禁止します。
ソースコード通りに動くのでデバッグしやすいわけです。
その代償として、実行速度は低下します。

通常はこの工程を何度も往復します。

デバック版で一通り動作確認し
リリース版で実行します。

リリース版では仕様に照らし合わせ念入りにテストします。
その結果、新たなバグが見つかり
デバッグ版で調査・修正
修正を反映したリリース版を作成し、再度テスト

別のバグが見つかり
またデバッグ版でデバッグ

・・・・

これを繰り返し

「完璧なリリース版」が出来れば終了です。

質問した人からのコメント

2010/3/31 00:23:36

詳しい回答ありがとうございました。
また、回答してくれたほかの方々もありがとうございました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

rhi********さん

2010/3/2403:48:30

ogd314さん のご回答に

>プログラムが一発で仕様通りに完全に動くことは
>まずありません。大抵バグを含みます。

とありますが、全くその通りです。
もし、一発で仕様通りに動いて望みの結果が出たら、
そのテストデータでは、バグに気がついてないのでは?
と疑う必要があります。どんなに簡単なプログラムでも
です。バグはプログラムを書いた本人
がうっかり気がつかずに作り込むものだからです。
データを変えて実行できるなら、自動的に数例~数十例
のテストを実行させて見る必要があります。

実務ケースで、デバッグがすんなり通ったケースほど、
後で問題になる可能性が高い事を経験しているので一言。

b_f********さん

2010/3/2320:56:03

VCでいう、デバッグビルドとリリースビルドの違いですよね?

基本的には、デバッグビルドはシンボル情報がバイナリの中に入るとか、確保したメモリの使っていない部分が初期化されるとかいった違いがあります。
デバッガで、ソースコードとの対応をとるためには、マシン語での実行位置とソースコードの対応とか、変数と変数名の対応とかがわからないと、デバッグできませんよね。
アセンブラコードとレジスタの値とかでもデバッグはできますけど、普通はC言語のソース上でどうなっているかを知りたいと思うものですからね。
そういった目的のために、「余計な情報」が入っていたり、余計な処理が入っているのがデバッグビルドです。
他にも、他の方がおっしゃっているような最適化の抑止とか、いろいろありますけど、一番大きい違いは上記のシンボル情報の有無ですね。

リリースビルドはそういった余分な情報などをなくして、プログラムのバイナリサイズを小さくし、結果として動作速度も若干速くなります。
#そのため、マルチタスクでのタイミングによって表面化するバグなどはデバッグ版ではでないとか言ったことも起こったりするんですけどね

ちなみに、やってみればわかると思いますけど、デバッグビルドもリリースビルドも何回でも実行できます。
普通はデバッグビルドで実行して、いろいろなテストをしてバグがないことを確認してから、リリースビルドで最終的な試験をします。

mei********さん

2010/3/2319:26:45

デバッグとは、プログラムのバグを見つけ修正すること。
リリースとはプログラム(コンパイルしたもの)を使ってよいと公開すること。
つまり、リリースする前に充分デバッグを行う必要があります。
リリースした後にバグが見付かったら、ソースプログラム(紺jパイル前のプログラム)に戻って修正し、もう一度コンパイルします。

>デバッグはバグを見つけるためにいろんな作業を行うためサイズが大きくなり速度が遅くなり、リリースはそれがないから速いというようなことだったんですが、
上記は誤りです。
プログラムはコンパイルしてから動作させます。
バグが残っていれば、通常そこでエラーで停止します(または間違った結果が出ます)。
デバッグしてはコンパイルして走らせ、バグを見つけては、ソースに戻って修正することを繰り返しプログラムの完成(リリース)に到るのです。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる