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__)
|
__VA_ARGS__)
|
||||||
#endif
|
#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
|
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||||
# include "log.h.generated.h"
|
# include "log.h.generated.h"
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user