6

最近、Delphi XE7 をインストールしました。古いアプリを最初にコンパイルしたとき、EXE のサイズが 10MB も大きくなったのを見て驚きました。

「プロジェクト オプション」で遊んでみると、「デバッグ情報」を「制限付きデバッグ情報」に設定すると、EXE のサイズが Delphi XE によって生成された EXE に非常に近いサイズに減少することがわかりました。おそらく、Delphi XE7 の「制限付きデバッグ情報」は、同じ EXE サイズになるため、Delphi XE の「デバッグ情報」と同等ですか?

では、完全な「デバッグ情報」によって EXE が (XE と比較して) 大きくなるのはなぜでしょうか? デバッググッズに完全にアクセスしたいので(EurekaLogにも必要です)、限られた情報でEXEをコンパイルできません(推測します)。
Embarcadero のドキュメントには、「限定的な」デバッグ情報と完全なデバッグ情報の違いについては何も書かれていません。

EurekaLog のドキュメントは古いバージョンの Delphi 用であるため、新しいオプション (慈悲深い) 'Limited debug info' を使用できるか、完全なデバッグ情報を使用できるかが明確に述べられていません。私は実験する必要があります。

4

1 に答える 1

14

「限定デバッグ情報」は、Android ターゲット コンパイラにのみ影響するオプションです。ただし、すべてのコンパイラが同じインターフェイスを共有するため、このオプションはすべてのターゲットに対して表示されます。個々のオブジェクト (.o) ファイルに含まれるデバッグ情報の量にのみ適用されます。Android (および iOS) の場合、デバッグ情報の形式は DWARF です。DWARF は非常に詳細な形式であり、特定のユニット内のすべてのタイプ、および特定のユニットによって「使用される」すべてのユニットのすべてのタイプに関する非常に詳細な構造タイプ情報を含めることができます。「制限付きデバッグ情報」では、使用されているすべてのユニットのタイプ情報は生成されません。これは、デバッグ中に一部のフィールドとローカル変数が検査できない可能性があることを意味します。

デバッグ情報が最終的な実行可能ファイルに含まれるかどうかについては、コンパイラ オプションではなく、リンカー オプションによって制御されます。リンカは、利用可能なデバッグ情報をリンクします。Android 向けのビルドで「デバッグ情報」が選択されている場合、最終的なイメージにはより多くの情報が含まれ、はるかに大きくなります。

ここで、あなたが Windows をターゲットにしていると推測します (実際にはそうではありませんが、ここで私の超能力を使用します)。その場合、「限定デバッグ情報」と「デバッグ情報」は同じです。もの。Windows では、デバッグ形式は「GIANT」と呼ばれます。「皮肉」と言えますか?DWARF は非常に冗長な形式ですが、Embarcadero (元は Borland) 独自の GIANT 形式はよりコンパクトです。サイズの増加は、ランタイム機能の追加と、おそらくジェネリックの使用の増加によるものにすぎません。

于 2015-01-14T04:02:20.053 に答える