mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
log.h: LOG_CALLSTACK
This commit is contained in:
parent
ca32eb31b8
commit
5fc775e2ef
@ -61,6 +61,30 @@
|
||||
__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if defined(__linux__)
|
||||
# include <execinfo.h>
|
||||
# define LOG_CALLSTACK(prefix) \
|
||||
do { \
|
||||
void *trace[100]; \
|
||||
int trace_size = backtrace(trace, 100); \
|
||||
\
|
||||
char exe[1024]; \
|
||||
ssize_t elen = readlink("/proc/self/exe", exe, sizeof(exe) - 1); \
|
||||
exe[elen] = 0; \
|
||||
\
|
||||
for (int i = 1; i < trace_size; i++) { \
|
||||
char buf[256]; \
|
||||
snprintf(buf, sizeof(buf), "addr2line -e %s -f -p %p", exe, trace[i]); \
|
||||
FILE *fp = popen(buf, "r"); \
|
||||
while (fgets(buf, sizeof(buf) - 1, fp) != NULL) { \
|
||||
buf[strlen(buf)-1] = 0; \
|
||||
do_log(DEBUG_LOG_LEVEL, __func__, __LINE__, true, prefix "%s", buf); \
|
||||
} \
|
||||
fclose(fp); \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "log.h.generated.h"
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user