Вы хотите взглянуть на libunwind - это кроссплатформенная библиотека, изначально разработанная HP для разматывания трассировок стека Itanium (что особенно сложно); но впоследствии был расширен до многих других платформ; включая x86-Linux и Itanium-HPUX.
со страницы руководства libunwind (3); Вот пример использования libunwind для написания типичной функции 'show backtrace':
#define UNW_LOCAL_ONLY
#include <libunwind.h>
void show_backtrace (void) {
unw_cursor_t cursor; unw_context_t uc;
unw_word_t ip, sp;
unw_getcontext(&uc);
unw_init_local(&cursor, &uc);
while (unw_step(&cursor) > 0) {
unw_get_reg(&cursor, UNW_REG_IP, &ip);
unw_get_reg(&cursor, UNW_REG_SP, &sp);
printf ("ip = %lx, sp = %lx\n", (long) ip, (long) sp);
}
}