首先来看一个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void print_stack() {
void *buffer[BT_BUF_SIZE];
int nptrs = backtrace(buffer, BT_BUF_SIZE);
char **strings = backtrace_symbols(buffer, nptrs);

if (!strings) {
perror("backtrace_symbols");
exit(EXIT_FAILURE);
}
for (size_t j = 0; j < nptrs; j++)
printf("%s\n", strings[j]);

free(strings);
}
效果

打不出调用栈当中的大多数函数名。这主要是因为编译时没有添加 -rdynamic 参数。

效果2

添加之后,就可以有了。这样搞我们就可以省得用 gdb 去调试调试器了。

打算在项目里引用一些 Log4j 之类的库。想做日志分级。日志里面细的东西实在是太细了。