BACKTRACE(3) | FreeBSD Library Functions Manual | BACKTRACE(3) |
名称
backtrace — 現在実行しているスレッドのバックトレースに書き入れるライブラリ
Backtrace Information Library (libexecinfo, -lexecinfo)書式
#include < execinfo.h> size_t
backtrace( void **addrlist, size_t len);
char **
backtrace_symbols( void * const *addrlist, size_t len);
int
backtrace_symbols_fd( void * const *addrlist, size_t len, int fd);
char **
backtrace_symbols_fmt( void * const *addrlist, size_t len, const char *fmt);
int
backtrace_symbols_fmt_fd( void * const *addrlist, size_t len, const char *fmt, int fd);
解説
backtrace() 関数は、 len フレームまで呼び出された各フレームに対するプログラムカウンタの値の配列 addrlist によって指された配列に置かれます。見つかった (それは、 len より少なくなるかもしれない) フレームの数が返されます。backtrace_symbols_fmt() 関数は、 len 要素の addrlist で backtrace() から以前に書き入れられたアドレスの配列を取り、それらを書式化するするために fmt を使用します。利用可能な書式化文字は、次の通りです:
- a
- %p を使用して印刷 (表示) されるような各要素の数値アドレス。
- n
- シンボルが動的であるなら、 dladdr(3) によって決定される (アドレス要素より小さな) 最も近い関数シンボルの名前、静的であるなら、実行形式で検索し、/proc ファイルシステムは、実行形式のパスを決定するために利用可能です。
- d
- シンボルアドレスと 0x%tx を使用して印刷されたアドレス要素の違い。
- D
- 0 でないなら、+0x%tx を使用して印刷された、シンボルアドレスとアドレス要素の違いで、または 0 であるなら、何もない。
- f
- dladdr(3) によって決定されるシンボルのファイル名。
書式化された文字列の配列は、単一の free(3) によって解放することができる、連続したメモリアドレスとして返されます。
backtrace_symbols() 関数は、 %a <%n%D> at %f の書式化引数を付けた backtrace_symbols_fmt() の呼び出しと同様です。
backtrace_symbols_fd() と backtrace_symbols_fmt_fd() は、配列または文字列を返す代わりに、_fd 以外の名前が付けられた関数と似ています、それらは、fd の文字列の配列を分離した改行を印刷し、成功すれば、 0 を返し、失敗すれば、 -1 を返します。
戻り値
backtrace() 関数は、バックトレースに書き入れられた要素の数を返します。 backtrace_symbols() と backtrace_symbols_fmt() は、成功すれば、文字列配列を返し、失敗すれば、 NULL を返し、 errno を設定します。また、診断出力は、ELF シンボル検索関数によって生成されます。歴史
関数群の backtrace() タイブラリは、 NetBSD 7.0 と FreeBSD 10.0 ではじめて登場しました。バグ
- エラーは、印刷 (表示) されるべきではありませんが、呼び出し側に異なって通信しました。
- これらの関数は、 elf(3) を使用するので、これは、ライブラリ依存性が導入されないように、 libc/libutil の一部である代わりの個別のライブラリです。
- 関数 (_fmt の変異型がない) の Linux バージョンは、 size_t 引数の代わりに int を使用します。
August 23, 2013 | FreeBSD |