名称
U_STACK_TRACE(), _UNW_STACK_TRACE() ― アンワインドライブラリを使ったプロシージャコールスタックのバックトレース情報の出力
構文
#include <unwind.h>
void U_STACK_TRACE();
_UNW_ReturnCode _UNW_STACK_TRACE(FILE * out_file);
説明
U_STACK_TRACE() は、フォーマットされたスタックトレース情報を標準エラー出力に出力します。 _UNW_STACK_TRACE() は、フォーマットされたスタックトレース情報を、パラメータ out_file で指定された出力ストリームに出力します。 出力を書き出すためには、ストリームは書き出し可能なストリームでなければなりません。
アプリケーション使用法
U_STACK_TRACE() と _UNW_STACK_TRACE() は、スレッドセーフです。
これらの関数は、非同期キャンセルセーフでない fprintf() を使用しているので、非同期キャンセルセーフではありません。
スレッドが U_STACK_TRACE() を実行しているときに、キャンセルポイントに達する可能性があります。
エラー
U_STACK_TRACE() は、以下の条件ではスタックの完全なバックトレース情報を出力できないことがあります。
メモリー不足。 アンワインドライブラリが、スタックのバックトレースまたは、出現した命令ポインターアドレスに対応するシンボルの検索に必要なメモリーを割り当てることができない場合。
Itanium ベース システムの Runtime Architecture に準拠していない実行可能ファイルや共有ライブラリがあるとき。
たとえば、無効であったり不完全であるアンワインドテーブルを持っている、あるいはアンワインドテーブルを持っていない場合。
または、無効な、または正しくないアンワインド情報ブロックを持っている場合など。
例
次のような C プログラムがあったとします。
#include <unwind.h>
foo()
{
U_STACK_TRACE();
}
main()
{
foo();
}
このプログラムをコンパイルして実行すると、次のような出力が得られます。
(0) 0x0000000004000a00 foo + 0x10 [a.out]
(1) 0x0000000004000a50 main + 0x10 [a.out]
(2) 0x60000000c0066e20 main_opd_entry + 0x40 [/usr/lib/hpux32/dld.so]
著者
U_STACK_TRACE() は HP で開発されました。