2009-04-17 33 views

答えて

31

デバッグビルドには、デバッガで使用できるデバッグシンボルが含まれます。リリースビルドにはデバッグシンボルが含まれていないことが多いので、クラッシュダンプを取得した場合、有益なシンボル名の代わりに16進数のアドレスがたくさんあります。

デバッグビルドは最適化(-O0 with gcc)でコンパイルされませんが、リリースビルドは最適化(通常-O2または-O3)でコンパイルされます。最適化は、デバッグをはるかに困難にします。リリースアプリケーションをデバッグしようとすると、アセンブリステートメントがHLLステートメント、ステートメントの並べ替え、関数のインライン化、ループのアンロールなどの理由で、デバッガーが非常に混乱します。

デバッグとリリースのビルドいくつかのコードはそれらに基づいて条件付きでコンパイルされます(例えば、配列境界チェック、アサーションなど)が、アプリケーションに非常に依存します。典型的な例は、リリースモードの場合は#define NDEBUGになり、アサーションが削除されます。

0

Tigerでは、デバッグビルドは「ゼロリンク」です。これはあなたの環境にのみ最適化されており、実際に完全なビルドではありません。

関連する問題