C でバックトレース表示

普通のやつらの下を行け: C でバックトレース表示 - bkブログより

glibc に含まれる backtrace() と backtrace_symbols_fd() を使うと実行中の C プログラムのバックトレースを表示できます

とのこと.デバッグ用マクロとかで使うと便利そう.

ちなみに,シグナルハンドラ内部では backtrace はできない.これは,シグナルハンドラはカーネルから呼び出されることによる.シグナルを受け取ったカーネルは,シグナルハンドラ専用のスタック上でシグナルハンドラ関数を呼び出す.そのため,スタックをbacktraceしても呼び出し元の情報は得られない.詳細は sigaltstack とかをみると良いかも.