void backtrace_log(const char *format, ...) { const int log_fd = get_logging_fd(); if (log_fd >= 0) { if (format && format[0]) { va_list args; va_start(args, format); log(format, args); va_end(args); } Frames frames; if (get_backtrace(frames, 2)) ::backtrace_symbols_fd(frames.data(), frames.size(), log_fd); } }
void backtrace_error(const char *format, ...) { const int pid = get_interposed_pid(); if (pid >= 0) { const int log_fd = get_logging_fd(); if (log_fd >= 0) { log("\nerror: %s (pid=%i): ", get_process_fullpath(), pid); if (format && format[0]) { va_list args; va_start(args, format); log(format, args); va_end(args); } Frames frames; if (get_backtrace(frames, 2)) ::backtrace_symbols_fd(frames.data(), frames.size(), log_fd); } } }