c语言打印函数调用栈
时间: 2023-11-07 14:47:33 浏览: 330
在C语言中,打印函数调用栈可以通过使用backtrace和backtrace_symbols这两个函数来实现。需要注意的是,这种方法在不同的编译器或操作系统上可能有所区别。
下面是一个示例代码,演示如何打印函数调用栈:
```c
#include <stdio.h>
#include <execinfo.h>
void printStackTrace() {
void *stack[10];
int size;
char **symbols;
size = backtrace(stack, 10);
symbols = backtrace_symbols(stack, size);
if (symbols == NULL) {
printf("Failed to retrieve function symbols\n");
return;
}
printf("Function call stack:\n");
for (int i = 0; i < size; i++) {
printf("%s\n", symbols[i]);
}
free(symbols);
}
void functionC() {
printStackTrace();
}
void functionB() {
functionC();
}
void functionA() {
functionB();
}
int main() {
functionA();
return 0;
}
```
运行上述代码,将会打印出函数调用栈信息,从main函数开始一直到printStackTrace函数。
请注意,在编译时,需要将`-rdynamic`选项传递给编译器,以便在符号信息中包含函数名。例如,使用以下命令编译代码:
```
gcc -g -rdynamic stack_trace.c -o stack_trace
```
希望对你有所帮助!如果有任何问题,请随时提问。
阅读全文