From 13b5a9155c7af455c92e4ae2848ada4c372e42ce Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sun, 8 May 2011 11:58:27 +0000 Subject: [PATCH] Add backtrace debugging facility that doesn't add linebreaks --- citadel/citserver.c | 26 ++++++++++++++++++++++++++ citadel/citserver.h | 1 + 2 files changed, 27 insertions(+) diff --git a/citadel/citserver.c b/citadel/citserver.c index cfe5c1b1a..71ec7e05e 100644 --- a/citadel/citserver.c +++ b/citadel/citserver.c @@ -106,6 +106,32 @@ void cit_backtrace(void) #endif } +void cit_oneline_backtrace(void) +{ +#ifdef HAVE_BACKTRACE + void *stack_frames[50]; + size_t size, i; + char **strings; + StrBuf *Buf; + + size = backtrace(stack_frames, sizeof(stack_frames) / sizeof(void*)); + strings = backtrace_symbols(stack_frames, size); + if (size > 0) + { + Buf = NewStrBuf(); + for (i = 1; i < size; i++) { + if (strings != NULL) + StrBufAppendPrintf(Buf, "%s : ", strings[i]); + else + StrBufAppendPrintf(Buf, "%p : ", stack_frames[i]); + } + free(strings); + CtdlLogPrintf(CTDL_ALERT, "%s\n", ChrPtr(Buf)); + FreeStrBuf(&Buf); + } +#endif +} + /* * print the actual stack frame. */ diff --git a/citadel/citserver.h b/citadel/citserver.h index c7cb29b0c..c294916e2 100644 --- a/citadel/citserver.h +++ b/citadel/citserver.h @@ -32,6 +32,7 @@ struct UserProcList { #define CTDLUSERIP (IsEmptyStr(CC->cs_addr) ? CC->cs_clientinfo: CC->cs_addr) void cit_backtrace(void); +void cit_oneline_backtrace(void); void cit_panic_backtrace(int SigNum); void master_startup (void); void master_cleanup (int exitcode); -- 2.30.2