Fossil SCM
Update the backtrace output formatting to the log file so that it is easy to copy/paste the backtrace hex addresses into an "addr2line" command-line in order to get symbolic names.
Commit
daaf9ee79c17f25d1d70506c1b9953f5fe5c71b0eea7321ef9a2000063ca0be8
Parent
0028303999dc1dd…
1 file changed
+9
-1
+9
-1
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -1573,11 +1573,19 @@ | ||
| 1573 | 1573 | size = backtrace(array, sizeof(array)/sizeof(array[0])); |
| 1574 | 1574 | strings = backtrace_symbols(array, size); |
| 1575 | 1575 | blob_init(&out, 0, 0); |
| 1576 | 1576 | blob_appendf(&out, "Segfault during %s", g.zPhase); |
| 1577 | 1577 | for(i=0; i<size; i++){ |
| 1578 | - blob_appendf(&out, "\n(%d) %s", i, strings[i]); | |
| 1578 | + size_t len; | |
| 1579 | + const char *z = strings[i]; | |
| 1580 | + if( i==0 ) blob_appendf(&out, "\nBacktrace:"); | |
| 1581 | + len = strlen(strings[i]); | |
| 1582 | + if( z[0]=='[' && z[len-1]==']' ){ | |
| 1583 | + blob_appendf(&out, " %.*s", (int)(len-2), &z[1]); | |
| 1584 | + }else{ | |
| 1585 | + blob_appendf(&out, " %s", z); | |
| 1586 | + } | |
| 1579 | 1587 | } |
| 1580 | 1588 | fossil_panic("%s", blob_str(&out)); |
| 1581 | 1589 | #else |
| 1582 | 1590 | fossil_panic("Segfault during %s", g.zPhase); |
| 1583 | 1591 | #endif |
| 1584 | 1592 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1573,11 +1573,19 @@ | |
| 1573 | size = backtrace(array, sizeof(array)/sizeof(array[0])); |
| 1574 | strings = backtrace_symbols(array, size); |
| 1575 | blob_init(&out, 0, 0); |
| 1576 | blob_appendf(&out, "Segfault during %s", g.zPhase); |
| 1577 | for(i=0; i<size; i++){ |
| 1578 | blob_appendf(&out, "\n(%d) %s", i, strings[i]); |
| 1579 | } |
| 1580 | fossil_panic("%s", blob_str(&out)); |
| 1581 | #else |
| 1582 | fossil_panic("Segfault during %s", g.zPhase); |
| 1583 | #endif |
| 1584 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1573,11 +1573,19 @@ | |
| 1573 | size = backtrace(array, sizeof(array)/sizeof(array[0])); |
| 1574 | strings = backtrace_symbols(array, size); |
| 1575 | blob_init(&out, 0, 0); |
| 1576 | blob_appendf(&out, "Segfault during %s", g.zPhase); |
| 1577 | for(i=0; i<size; i++){ |
| 1578 | size_t len; |
| 1579 | const char *z = strings[i]; |
| 1580 | if( i==0 ) blob_appendf(&out, "\nBacktrace:"); |
| 1581 | len = strlen(strings[i]); |
| 1582 | if( z[0]=='[' && z[len-1]==']' ){ |
| 1583 | blob_appendf(&out, " %.*s", (int)(len-2), &z[1]); |
| 1584 | }else{ |
| 1585 | blob_appendf(&out, " %s", z); |
| 1586 | } |
| 1587 | } |
| 1588 | fossil_panic("%s", blob_str(&out)); |
| 1589 | #else |
| 1590 | fossil_panic("Segfault during %s", g.zPhase); |
| 1591 | #endif |
| 1592 |