From cb7a06379d872ca28918517c7f9d1ad14f02b389 Mon Sep 17 00:00:00 2001 From: Diederik de Groot Date: Fri, 21 Apr 2017 16:36:19 +0200 Subject: [PATCH] Enh: Add support for backtrace using execinfo --- Makefile.am | 2 +- dragonflybsd/DragonFlyBSDCRT.c | 16 +++++++++++++++- dragonflybsd/DragonFlyBSDCRT.h | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index cdd4fb95..e033c35d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -54,7 +54,7 @@ freebsd/FreeBSDProcess.h freebsd/FreeBSDCRT.h freebsd/Battery.h endif if HTOP_DRAGONFLYBSD -htop_LDFLAGS += -lkvm -lkinfo +htop_LDFLAGS += -lkvm -lkinfo -lexecinfo myhtopplatsources = dragonflybsd/Platform.c dragonflybsd/DragonFlyBSDProcessList.c \ dragonflybsd/DragonFlyBSDProcess.c dragonflybsd/DragonFlyBSDCRT.c dragonflybsd/Battery.c diff --git a/dragonflybsd/DragonFlyBSDCRT.c b/dragonflybsd/DragonFlyBSDCRT.c index 52e86d9e..ba311856 100644 --- a/dragonflybsd/DragonFlyBSDCRT.c +++ b/dragonflybsd/DragonFlyBSDCRT.c @@ -10,12 +10,26 @@ in the source distribution for its full text. #include "CRT.h" #include #include +#ifdef HAVE_EXECINFO_H +#include +#endif void CRT_handleSIGSEGV(int sgn) { (void) sgn; CRT_done(); - fprintf(stderr, "\n\nhtop " VERSION " aborting.\n"); + fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at http://hisham.hm/htop\n"); + #ifdef HAVE_EXECINFO_H + size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *)); + fprintf(stderr, "\n Please include in your report the following backtrace: \n"); + backtrace_symbols_fd(backtraceArray, size, 2); + fprintf(stderr, "\nAdditionally, in order to make the above backtrace useful,"); + fprintf(stderr, "\nplease also run the following command to generate a disassembly of your binary:"); + fprintf(stderr, "\n\n objdump -d `which htop` > ~/htop.objdump"); + fprintf(stderr, "\n\nand then attach the file ~/htop.objdump to your bug report."); + fprintf(stderr, "\n\nThank you for helping to improve htop!\n\n"); + #else fprintf(stderr, "\nPlease contact your DragonFlyBSD package maintainer!\n\n"); + #endif abort(); } diff --git a/dragonflybsd/DragonFlyBSDCRT.h b/dragonflybsd/DragonFlyBSDCRT.h index 1b650046..b934ac32 100644 --- a/dragonflybsd/DragonFlyBSDCRT.h +++ b/dragonflybsd/DragonFlyBSDCRT.h @@ -10,6 +10,9 @@ Released under the GNU GPL, see the COPYING file in the source distribution for its full text. */ +#ifdef HAVE_EXECINFO_H +#endif + void CRT_handleSIGSEGV(int sgn);