問題タブ [addr2line]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
185 参照

c - スタックトレースの数値アドレスをシンボルに変換する方法は?

syslog に次のメッセージが表示されて時々クラッシュするプログラムがあります。

アドレスの代わりに、クラッシュした関数/行に関する読み取り可能なメッセージが表示されるように、何らかの方法で変更することは可能ですか?

プログラム ソースにアクセスでき、addr2line を介して関数を検索できます。ただし、私が興味を持っているのは、関数へのポインターをライブで解決したいので、syslog に表示されることです。これを実装する方法についてあなたの考えを共有してください

UPD: シグナル ハンドラーを登録し、backtrace() 関数を実行することで可能であることがわかりました。これは、プログラムを変更せずにこれを行う方法ですか? または、クラッシュ時にすべてのプログラムがバックトレースを実行するように、一般的な変更を行うことは可能ですか?

0 投票する
1 に答える
81 参照

function - ライブラリ関数が与えられた場合、そのファイル オフセットを取得するにはどうすればよいですか?

backtrace と backtrace_symbols を使用して、目的のマングルされた関数名を取得できます (libfsw.so に属する funcA_mangledName と呼びましょう)。

私の目標は、ソース ファイルとそれが定義されている行番号を取得することです。以下に示すように、ライブラリ ファイルで定義されていない関数に対してこれを行うことができます。stacktrace はバックトレースを保持します。filename = 通常の場合は S_main_executable です。

ただし、関数がライブラリの一部である場合、つまり filename = libfsw.so の場合、これは機能しません。

逆方向に作業すると、Linux端末でこれを行うことができます:

取得する: 000000000020cbea T funcA_mangledName

次に、Linuxターミナルに入ると:

正しいソース ファイルと行番号を取得します。

最初からその正しいファイル オフセット番号まで何が欠けていますか?