0

組み込み ARM プラットフォームでメモリの問題を特定するのに役立ついくつかの診断ツールに取り組んでいます。メモリの制約により、すべてのライブラリのすべてのシンボルをユニット自体にロードすることはできません。後で別のマシンでシンボルを解決できるようにするには、どのような情報を保存する必要がありますか?

シンボルを解決するマシンは、必要なすべてのシンボル パッケージを備えたクロス ツールチェーンと gdb を備えた x86 マシンです。診断出力に保存したこの情報からバッチ内のシンボルを解決するには、何を使用しますか? 解決を行うためのライブラリまたは API はありますか?

4

1 に答える 1

0

次の情報は Android に関するものです。その一部はARMアーキテクチャ用のELFファイルにもコンパイルされているため、あなたの場合に役立つかもしれません。

ビルドプロセスは次のようになります。

  1. すべてがデバッグ情報とともにコンパイルされます ( gcc -g ...)
  2. 次に、すべてのバイナリが取り除かれ、システム イメージにパックされます。ただし、各バイナリ ファイルのストリップされていない元のバージョンはビルド ディレクトリに残ります。
  3. ターゲット デバイスでシステム イメージがフラッシュされます。

したがって、診断出力からシンボルを解決するには、 を使用できますarm-linux-androideabi-addr2line。例:

${CROSS_COMPILE}addr2line --demangle -f -e PATH_TO_NOT_STRIPPED_BINARY ADDRESS

追加情報は、次の質問にあります: addr2line の使用方法

また、このプロセスを自動化する非常に単純な python スクリプトを用意しました: decode_callstack.py (これは Android 診断出力で動作し、使用する前に PREFIX 変数を変更する必要があります)

于 2013-01-25T10:19:59.407 に答える