0

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

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

sprintf(syscom[jj], "addr2line %p -e %s", stacktrace[jj], filename);
system(syscom[jj]);

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

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

nm libfsw.so | grep funcA_mangledName

取得する: 000000000020cbea T funcA_mangledName

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

addr2line 0x000000000020cbea -e libfsw.so

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

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

4

1 に答える 1