7 #if defined(__linux__) && !defined(__GLIBC__) || \ 8 defined(__UCLIBC__) || \ 10 #define HAVE_EXECINFO_H 0 12 #define HAVE_EXECINFO_H 1 27 const int size = backtrace(frames, arraysize(frames));
31 for (
int i = 1; i < size; i += 1) {
32 void* frame = frames[i];
33 fprintf(fp,
"%2d: ", i);
35 const bool have_info = dladdr(frame, &info);
36 if (!have_info || info.dli_sname ==
nullptr) {
37 fprintf(fp,
"%p", frame);
38 }
else if (
char* demangled = abi::__cxa_demangle(info.dli_sname, 0, 0, 0)) {
39 fprintf(fp,
"%s", demangled);
42 fprintf(fp,
"%s", info.dli_sname);
44 if (have_info && info.dli_fname !=
nullptr) {
45 fprintf(fp,
" [%s]", info.dli_fname);
49 #endif // HAVE_EXECINFO_H
void DumpBacktrace(FILE *fp)