MINOR: debug: print gdb hints when crashing
To make bug reporting easier for users, when crashing, let's suggest what to do. Typically when a BUG_ON() matches, only the current thread is useful the vast majority of the time, while when the watchdog triggers, all threads are interesting. The messages are printed at the end after the dump. We may adjust these with wiki links in the future is more detailed instructions are relevant. (cherry picked from commit 8f204fa8aeadef3faea4471ba9cfd93d9d168960) Signed-off-by: Willy Tarreau <w@1wt.eu>
This commit is contained in:
parent
2913ab11dc
commit
96847724af
@ -123,9 +123,16 @@ static __attribute__((noinline,noreturn,unused)) void abort_with_line(uint line)
|
||||
}
|
||||
|
||||
#define __ABORT_NOW(file, line, ...) do { \
|
||||
extern ssize_t write(int, const void *, size_t); \
|
||||
const char *msg; \
|
||||
if (sizeof("" __VA_ARGS__) > 1) \
|
||||
complain(NULL, "\nABORT at " file ":" #line ": " __VA_ARGS__ "\n", 1); \
|
||||
DUMP_TRACE(); \
|
||||
msg = "\n" \
|
||||
"Hint: when reporting this bug to developers, please check if a core file was\n" \
|
||||
" produced, open it with 'gdb', issue 'bt' to produce a backtrace for the\n" \
|
||||
" current thread only, then join it with the bug report.\n"; \
|
||||
DISGUISE(write(2, msg, strlen(msg))); \
|
||||
abort_with_line(__LINE__); \
|
||||
} while (0)
|
||||
#else
|
||||
@ -133,9 +140,16 @@ static __attribute__((noinline,noreturn,unused)) void abort_with_line(uint line)
|
||||
* stack and stops at the exact location we need.
|
||||
*/
|
||||
#define __ABORT_NOW(file, line, ...) do { \
|
||||
extern ssize_t write(int, const void *, size_t); \
|
||||
const char *msg; \
|
||||
if (sizeof("" __VA_ARGS__) > 1) \
|
||||
complain(NULL, "\nABORT at " file ":" #line ": " __VA_ARGS__ "\n", 1); \
|
||||
DUMP_TRACE(); \
|
||||
msg = "\n" \
|
||||
"Hint: when reporting this bug to developers, please check if a core file was\n" \
|
||||
" produced, open it with 'gdb', issue 'bt' to produce a backtrace for the\n" \
|
||||
" current thread only, then join it with the bug report.\n"; \
|
||||
DISGUISE(write(2, msg, strlen(msg))); \
|
||||
ha_crash_now(); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
@ -662,6 +662,15 @@ void ha_panic()
|
||||
DISGUISE(write(2, trash.area, trash.data));
|
||||
}
|
||||
|
||||
chunk_printf(&trash,
|
||||
"\n"
|
||||
"Hint: when reporting this bug to developers, please check if a core file was\n"
|
||||
" produced, open it with 'gdb', issue 't a a bt full', check that the\n"
|
||||
" output does not contain sensitive data, then join it with the bug report.\n"
|
||||
" For more info, please see https://github.com/haproxy/haproxy/issues/2374\n");
|
||||
|
||||
DISGUISE(write(2, trash.area, trash.data));
|
||||
|
||||
for (;;)
|
||||
abort();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user