15

コンテキストを説明するために、ここではC++コードをg++でコンパイルすることについて話しています。

実稼働ビルドに-gフラグを含めると、メンテナンスにどのように役立つかがわかります。プログラムが予期せずクラッシュした場合、プログラムのデバッグがはるかに簡単になります。

ここでの私の質問は、-gフラグを含めると、サイズを増やす以外の方法で出力実行可能ファイルに影響を与えるでしょうか?どういうわけかコードを遅くすることができますか(たとえば、特定の最適化をオフにすることによって)?

私が理解していることから、そうすべきではありません(ドキュメントにはデバッグシンボルを含めることだけが記載されています)が、よくわかりません。

4

3 に答える 3

14

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

于 2012-06-11T22:28:51.033 に答える
6

特定の最適化がデバッグシンボルでオフになっていることを読んだことを覚えています。デバッグオプション-gはバイナリ実行可能ファイルをどのように変更しますか?

グーグルはまた、このトピックに関連するより多くの投稿を表示します。

ただし、コードのパフォーマンスに非常に敏感でない限り、実際に影響を受けるとは思いません。そして、それ以外は、頭のてっぺんからの欠点はわかりません(大きなバイナリ以外)。

于 2012-06-11T22:30:38.680 に答える
0

ここでの私の質問は、-gフラグを含めると、サイズを増やす以外の方法で出力実行可能ファイルに影響を与えるでしょうか?

いいえ、デバッグ情報を使用して最適化されたバイナリを生成することは完全に可能ですこれは、通常のコードにはまったく影響しません(ただし、変数が存在する必要がない場合や、インライン関数のデバッグが困難な場合など、情報の有用性は低くなります)。 )。

Debianディストリビューションは、デバッグ情報を使用してパッケージを構築します。この情報は後で削除されます(「デバッグパッケージ」に分割される場合もあります)。

ただし、サイズの増加はかなり大きい場合があることに注意してください。

于 2012-06-11T22:36:56.287 に答える