2011-06-23 7 views
2

ロード時に初期化される構造を持つオープンソースライブラリをデバッグしています。構造体のメンバーの1つは関数ポインタです。どの機能を指しているのかを知る最も簡単な方法は何ですか?たとえば、関数ポインタの値を出力すると、関数の名前を見つけるために使用できるツールがありますか?私は組み込みLinuxシステムでこれをやっていますが、GDBは利用できません(まだ)。このアドレスはどの機能を指していますか?

答えて

5

リンカはマップファイルを出力できます。あなたの関数が動き回っていないと仮定すると、そこのアドレスを調べることができます。マップファイルを作成するオプションはさまざまです。私のMacでは-mapLinux man page-Mapと言います。

編集上の問題を除いて、ソースレベルのデバッグソリューションがない場合は、最初にの作業が必要です。開発に適したインフラが整うまで、他の作業をすべて停止します。経営幹部に重要だと納得させるために戦わなければならないかもしれませんが、うまくいけばそれを理解できるようにすることができます。

1

addr2line commandが便利だと思います。

+0

私が持っているアドレスは共有ライブラリの関数です。私はライブラリのベースアドレスを取得し、ポインタからそれを減算する必要があると推測しています。共有ライブラリのベースアドレスを取得する最も簡単な方法は何ですか? – waffleman

+0

addr2lineを試しましたか?実行可能ファイルが参照する共有ライブラリを追跡し、答えを出す必要があります... – Nemo

関連する問題