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

在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选项,以保留符号信息。然后运行程序,将看到打印出的堆栈跟踪信息。

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容