はじめまして。
現在VC2003でプログラムを組んでいるのですが、
リリースビルドとデバッグビルドの違いに関してお聞かせ下さい。
当方は、リリースビルドだと最適化が行われて、デバッグ情報が無いという認識で、
デバッグビルドですと、最適化が行われないがデバッグ情報を吐き出して使えると
いう認識なのですが合っていますでしょうか?
また、他にも違いがあったりしますでしょうか?
よろしくお願いします。
設定変えれば最適化とかデバッグ情報とか変更できるけどね。
デバッグだと未設定の変数や確保したメモリや解放したメモリをある値に変更することで
バグを発見しやすくしてくれる機能が入ってたりするみたいだね。
デバッグビルドでは
デバッグビルドに必要なコンパイル、リンクのオプションを予め設定しているもの
として提供しているので、あなたが設定する手間を省いているのです
リリースビルドでも
リリースビルドに必要なコンパイル、リンクのオプションを予め設定しているもの
として提供しているので、あなたが設定する手間を省いているのです
デバッグオプションにはコンパイルオプションで -D DEBUG が設定してあるのと
デバッグ版のランタイムライブラリーがリンク対象になるのでデバッグ時の支援
(TRACEマクロなど)が受けられます
最適化についてもデバッグ時の妨げになるので最適化しない設定を提供している
だけで、最適化するように変えることも(プロジェクト毎にあなたが)可能です
みなさん、返信ありがとうございます。
>デバッグだと未設定の変数や確保したメモリや解放したメモリをある値に変更すること
>でバグを発見しやすくしてくれる機能が入ってたりするみたいだね。
↑は初めて聞きました・・・。便利そうですね。
どこからその機能を使うか分かりますでしょうか?
>最適化についてもデバッグ時の妨げになるので最適化しない設定を提供している
>だけで、最適化するように変えることも(プロジェクト毎にあなたが)可能です
最適化をするとデバッグ情報を吐き出さないですよね?
それともデバッグ情報も吐き出しつつ最適化をしてくれるオプションもあるのでしょう
か?
ビルドオプションを弄べば可能です。
リリースビルドでも、デバッグ情報入れられたハズ。
その逆も然り。
私の今までの知識がまちがっているのかもしれません・・・。
リリースとは最適化がされるので、
最適化の為にはデバッグ情報を含んだ出力ができないと思っていました。
間違いですよね?
いずれも、使いやすいようにあらかじめ用意されている、設定のプリセットです。
必要であれば、独自のビルドオプションの構成も作成できます。
>リリースとは最適化がされるので、
>最適化の為にはデバッグ情報を含んだ出力ができないと思っていました。
>
>間違いですよね?
間違った理解です
デバッグ情報についてはコンパイルオプションとリンクオプションと両方
あるはずです(少なくとも VC6 まではそうだった)
最適化はデバッグ情報とは別のコンパイルオプションです
何度も同じことを書くのは嫌なので、私の書いた返事をもう一度読んでみて下さい
仕事でやってる/公開するソフトを作っている人には大事な違いとして、
Microsoft社のライセンス上、DEBUG版は外に配布する際の制限があり、
配布はRELEASE版で行う必要があります。
(正確なライセンスは状況を確認、Microsoftに聞いてください)
「デフォルトでは」と但し書きがあれば、プロジェクト作成時に、
RELEASE版はデフォルト設定で最適化が有効でデバッグ情報がなく、
DEBUG版はデフォルトで最適化無効のデバッグ情報付になりますね。
# 後段はかぶってた…orz
デバッグビルドで最適化を外しているのは、最適化を入れてしまうと
デバッガで追う時にソースファイルとバイナリイメージの対応が取れなくなって
デバッガ上の表示が変になるからだったと思います。
デバッガを使わないならデバッグ情報を付加する事はできると思います。
まあ、デバッガで動かしても終えない状態と言うのが意味があるのかと言う話は
あると思いますけれど。
それでもリークチェック等は動くと思うのでそういう意味ではまんざら意味が無いという
話ではないかもしれません。
うおっ、
誤)
まあ、デバッガで動かしても終えない状態と言うのが意味があるのかと言う話は
正)
まあ、デバッガで動かしても追えない状態と言うのが意味があるのかと言う話は
失礼しました。