答えはすでに手元にありました:それは私が質問でリンクしたのと同じページにありました。最後に、私は正常に使用しlibunwind
ました。
#include <libunwind.h>
#include <stdio.h>
void do_backtrace()
{
unw_cursor_t cursor;
unw_context_t context;
unw_getcontext(&context);
unw_init_local(&cursor, &context);
while (unw_step(&cursor) > 0)
{
unw_word_t offset, pc;
char fname[64];
unw_get_reg(&cursor, UNW_REG_IP, &pc);
fname[0] = '\0';
(void) unw_get_proc_name(&cursor, fname, sizeof(fname), &offset);
printf ("%p : (%s+0x%x) [%p]\n", pc, fname, offset, pc);
}
}
int main()
{
do_backtrace();
return 0;
}
コマンドラインの最後にリンカーオプションを配置するのを(再び)忘れていたため、リンクエラーが発生していました。g++
コマンドラインオプションを無視するときに、なぜ/gcc
少なくとも警告を出さないのか、私は本当に理解していません。コンパイルする正しいコマンドラインは次の-g
とおりです(必須ではありません)。
g++ -static unwind.cpp -o unwind -lunwind -lunwind-x86