The ups and downs of strlcpy()
Posted Jul 25, 2012 15:40 UTC (Wed) by
mmorrow (subscriber, #83845)
In reply to:
The ups and downs of strlcpy() by nix
Parent article:
The ups and downs of strlcpy()
Backtracing on x86_64 is actually quite reasonable. Here are two methods:
#if defined(USE_BACKTRACE)
/*
-DUSE_BACKTRACE -rdynamic
(-rdynamic for backtrace_symbols)
*/
#include <execinfo.h>
void print_trace(void)
{
const size_t n = 10
void *array[n];
size_t size = backtrace(array,n);
char **strings = backtrace_symbols(array,size);
for(size_t i = 0; i < size; i++)
fprintf(stderr,"%s\n",strings[i]);
free(strings);
}
#elif defined(USE_LIBUNWIND)
/*
-DUSE_LIBUNWIND -lunwind-x86_64
*/
#include <libunwind.h>
void print_trace(void)
{
unw_cursor_t cur;
unw_context_t cxt;
unw_getcontext(&cxt);
unw_init_local(&cur,&cxt);
while(unw_step(&cur) > 0)
{
unw_word_t off, pc;
char fname[64] = {[0] = '\0'};
unw_get_reg(&cur,UNW_REG_IP,&pc);
unw_get_proc_name(&cur,fname,sizeof(fname),&off);
printf("%p: (%s+0x%x) [%p]\n",pc,fname,off,pc);
}
}
#endif
(
Log in to post comments)