2011-12-28 4 views
1

特定のプラットフォームのデフォルトのデバッグ形式をどのように読むか知っている人はいませんか?デフォルトのデバッグ形式を検出するコマンド

さらにお手伝いしたい場合は、ここをクリックしてください。私は、gccがxubuntu 11.10のライブラリ(gsl)にいくつかのソースファイルの完全なパスを格納していますが、redhatを使って岩石のクラスタでそうしているわけではありません。 xubuntuはgcc 4.6、赤い帽子は4.1です。 Redhatクラスタはx64、xubuntuはx32です。これらは私が知っている違いです。問題は、gdbがubuntuでソースファイルを見つけられるが、redhatでは見つからないということです。 Redhatでは、パスのないソースファイル名(情報ソース)だけが保存されます。本当に奇妙なこと(IMO)は、コードとmakefileが両方のプラットフォームで同じであることです。唯一の違いはパス(両方で絶対的です)です。

この時点で私の唯一の手掛かりは、何とかデフォルトでデバッグ形式が両方のプラットフォームでスタブではないということです。だから私は各プラットフォームのそれらをチェックしたかった。しかし、あなたが私に全体的な問題の手を差し伸べることができれば、それはとても感謝しています。

答えて

1

ユーティリティdwarfdumpを試すと、さまざまなプラットフォームのバイナリのデバッグ情報に関する追加情報を得ることができます。

gccの引数として明示的に-gstabsを要求していない限り、どちらのプラットフォームでもデバッグ形式がスタブであった場合、私は驚いています。私はDWARFが長い間、Linuxのintel gccのデフォルトであることは確かです。 readelf -S <binary>を使って.stabまたは.stabstrセクションを探して、実際にスタブを使用しているかどうかを調べることができます。

+0

こんにちは、まずはご協力いただきありがとうございます。私は-gと-gstabs +でコンパイルしようとしました。あなたが示唆したように、gstabs +のバージョンは.stabと.stabstrのセクションを持っていました。プレーングのものはどちらのプラットフォームにもないので、私は両方で 'DWARF'を仮定します。あなたが私が知らなかった(readelf)ツールを使って、2つのバイナリ間で異なるエントリだけがxubuntuバージョンに存在する 'NOTE'タイプの' .note.gnu.build-i'です。それは関連性がありますか? Redhatのデバッグバイナリで絶対パスを取得して取得する方法に関する提案はありますか? – nixahn

+0

私はクラスタの管理者ではないため、インストールされていないため、dwarfdumpを試すことができません。管理者はすでに私のためにgdbをインストールしていたので、あまりにも多くの方向にそれを押し込むことはできません... – nixahn

+0

dwarfdumpとlibdwarfをソースからコンパイルすることができました。私はバイナリが違う理由について、本当に素晴らしいアイデアはありません。しかし、gdbの 'directory'コマンドを使ってgdbに、デバッグ情報にパスが記録されていない場所のソースを探す場所を指示することで、この問題を回避できます。 – acm

関連する問題