美文网首页
Linux环境下,用C程序打印程序堆栈示例

Linux环境下,用C程序打印程序堆栈示例

作者: 徐冰清 | 来源:发表于2023-05-28 18:34 被阅读0次

在Linux环境下,可以使用backtrace函数和backtrace_symbols函数来打印C程序的堆栈跟踪信息。下面是一个示例程序,展示了如何在Linux中打印堆栈跟踪:

#include <stdio.h>
#include <stdlib.h>
#include <execinfo.h>

void printStackTrace() {
    void* stackTrace[100];
    int stackTraceSize = backtrace(stackTrace, sizeof(stackTrace) / sizeof(void*));
    char** stackTraceSymbols = backtrace_symbols(stackTrace, stackTraceSize);

    if (stackTraceSymbols != NULL) {
        printf("Program stack trace:\n");
        for (int i = 0; i < stackTraceSize; i++) {
            printf("%s\n", stackTraceSymbols[i]);
        }
        free(stackTraceSymbols);
    }
}

void func3() {
    printStackTrace();
}

void func2() {
    func3();
}

void func1() {
    func2();
}

int main() {
    func1();
    return 0;
}

在这个示例程序中,printStackTrace函数使用backtrace函数获取当前程序的堆栈跟踪信息,并使用backtrace_symbols函数将地址转换为可读的符号字符串。然后,它将堆栈跟踪信息打印到标准输出。

要编译并运行这个程序,使用以下命令:

gcc program.c -o program -rdynamic
./program

编译时需要添加-rdynamic选项,以保留符号信息。然后运行程序,将看到打印出的堆栈跟踪信息。

这种方法在不同的平台上可能会有所不同,具体取决于操作系统和编译器的支持。

相关文章

网友评论

      本文标题:Linux环境下,用C程序打印程序堆栈示例

      本文链接:https://www.haomeiwen.com/subject/stzledtx.html