5

メモリを介してプログラムの実行を追跡するアプリケーションがあります。を使用readelf --debug-dump=decodedlineしてメモリアドレス/行番号情報を取得しようとしましたが、表示されるメモリアドレスは、そのダンプによって指定されたものと頻繁に一致しません。各アドレスをDWARFデータに表示される「最新の」アドレスと一致させるために何かを書きました。これはいくつかのことをクリーンアップしたように見えましたが、それがこのデータを解釈する「公式」の方法かどうかはわかりません。

誰かがDWARFを使用してプログラムアドレスを行番号にマップする正確なプロセスを説明できますか?

4

2 に答える 2

4

プログラムをご覧くださいaddr2line。問題を完全に解決しない場合(たとえば、問題を解決したり、機能をリンクしたりすることによって)、これを行う方法についてのガイダンスが得られる可能性があります。

于 2011-07-21T17:49:56.933 に答える
0

確かに、フィルミラーの答えで述べたように、addr2lineあなたの友達です。バックトレースから取得したアドレスから(C ++)アプリケーションのソースコードの行番号を取得する方法を示す要点があります

このプロセスに従うと、言及したプロセスは表示されませんが、コードがオブジェクトコード(実行可能ファイルまたはライブラリ/アーカイブ内)にどのようにマップされるかを知ることができます。それが役に立てば幸い。

于 2019-07-09T20:04:49.753 に答える