Fossil SCM

Add GCC backtraces to the segv handler.

drh 2018-07-19 11:40 UTC trunk
Commit cc8c33ee8aff995b170421ebf78598a314e49ed7248c080ba58818a05d5631d8
1 file changed +17 -1
+17 -1
--- src/main.c
+++ src/main.c
@@ -1418,11 +1418,27 @@
14181418
14191419
/*
14201420
** Called whenever a crash is encountered while processing a webpage.
14211421
*/
14221422
void sigsegv_handler(int x){
1423
- fossil_errorlog("Segfault");
1423
+#if HAVE_BACKTRACE
1424
+ void *array[20];
1425
+ size_t size;
1426
+ char **strings;
1427
+ size_t i;
1428
+ Blob out;
1429
+ size = backtrace(array, sizeof(array)/sizeof(array[0]));
1430
+ strings = backtrace_symbols(array, size);
1431
+ blob_init(&out, 0, 0);
1432
+ blob_appendf(&out, "Segfault");
1433
+ for(i=0; i<size; i++){
1434
+ blob_appendf(&out, "\n(%d) %s", i, strings[i]);
1435
+ }
1436
+ fossil_panic("%s", blob_str(&out));
1437
+#else
1438
+ fossil_panic("Segfault");
1439
+#endif
14241440
exit(1);
14251441
}
14261442
14271443
/*
14281444
** Called if a server gets a SIGPIPE. This often happens when a client
14291445
--- src/main.c
+++ src/main.c
@@ -1418,11 +1418,27 @@
1418
1419 /*
1420 ** Called whenever a crash is encountered while processing a webpage.
1421 */
1422 void sigsegv_handler(int x){
1423 fossil_errorlog("Segfault");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1424 exit(1);
1425 }
1426
1427 /*
1428 ** Called if a server gets a SIGPIPE. This often happens when a client
1429
--- src/main.c
+++ src/main.c
@@ -1418,11 +1418,27 @@
1418
1419 /*
1420 ** Called whenever a crash is encountered while processing a webpage.
1421 */
1422 void sigsegv_handler(int x){
1423 #if HAVE_BACKTRACE
1424 void *array[20];
1425 size_t size;
1426 char **strings;
1427 size_t i;
1428 Blob out;
1429 size = backtrace(array, sizeof(array)/sizeof(array[0]));
1430 strings = backtrace_symbols(array, size);
1431 blob_init(&out, 0, 0);
1432 blob_appendf(&out, "Segfault");
1433 for(i=0; i<size; i++){
1434 blob_appendf(&out, "\n(%d) %s", i, strings[i]);
1435 }
1436 fossil_panic("%s", blob_str(&out));
1437 #else
1438 fossil_panic("Segfault");
1439 #endif
1440 exit(1);
1441 }
1442
1443 /*
1444 ** Called if a server gets a SIGPIPE. This often happens when a client
1445

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button