2012-06-11 3 views
11

ちょっとした文脈を与えるために、私はここでg ++を使ってC++コードをコンパイルすることを話しています。g ++ - プロダクションのために "-g"フラグを使用していますか?

プロダクションビルドに-gフラグを含めると、メンテナンスに便利であることがわかります。予期せずクラッシュした場合、プログラムは非常に簡単にデバッグできます。

ここで私の質問は、-gフラグを含め、サイズを大きくする以外の方法で実行可能な出力に影響しますか?何とかコードを遅くすることができますか(特定の最適化を無効にするなど)?

私が理解しているところでは、(デバッグシンボルを含むことしか書かれていない)ドキュメントではありませんが、わかりません。

答えて

13

-gフラグはコード生成には影響しません。シンボルテーブルとデバッグメタデータのみが変更されます。それらは実行可能コードセクションには存在しないので、コードがhteデバッガの外部で実行されてもパフォーマンスに影響を与えません。

4

私は特定の最適化は、デバッグシンボルでオフになっていることを読んで覚えておいてください:How Does The Debugging Option -g Change the Binary Executable?

Googlingも、このトピックに関連した記事を示します。

あなたのコードがパフォーマンスに非常に敏感でない限り、本当にあなたに影響するとは思わないでしょう。それ以外では、私は頭の上からのマイナス面を知りません(より大きなバイナリ以外)。

+2

私はこれらのドキュメントを読んでいるので、gcc以外のコンパイラだけが-gによって影響を受ける最適化を持っています。私の経験ではgccの方向性は他の方向に向いています。デバッガで見ることとできることは、最適化の影響を受けます。もちろん、これは積極的な最適化から期待されるものです。そこにないものをデバッグすることはできません。 – Gene

+0

@ジーン:ああ、私は見る...面白い、それを指摘してくれてありがとう。だから私はGCCについて間違っていた人のようです! – Mehrdad

0

ここで私の質問は、-gフラグを含めて、サイズを増やす以外の方法で実行可能な出力に影響しますか?

いいえ、変数が常時存在しない必要があるので、その情報は、あまり有用であるかもしれないが、(どのような方法で通常のコードには影響しない情報を、デバッグに最適化されたバイナリにを生成するために完全に可能です、デバッグ情報を含むパッケージをビルドします。パッケージは後で削除されます(「デバッグパッケージ」に分割されることもあります)。

ただし、サイズが大きくなることがあります。

関連する問題