【Linux】直接打印堆栈调试信息

简介: 【Linux】直接打印堆栈调试信息

直接打印堆栈调试信息

测试代码如下:

#include <stdio.h>
#include <signal.h>

//信号钩子函数,获取栈信息,然后打印
void handle_segv(int signum){
    void *array[100];
    size_t size;
    char **strings;
    size_t i;

    signal(signum,SIG_DFL);
    size = backtrace(array,100);
    strings = (char**)backtrace_symbols(array,size);

    fprintf(stderr,"Launcher received SIG:%d Stack trace:\n",signum);
    for(i = 0;i <size;i++){
        fprintf(stderr,"%d %s\n",i,strings[i]);
    }
    free(strings);
}
int func(int* p){
    int y = *p;
    return y;
}
int main(void){
    int *p = NULL;
    signal(SIGSEGV,handle_segv);
    signal(SIGABRT,handle_segv);
    return func(p);
}

编译:

gcc -g demo.c -o demo

执行:
image-20220715211846530

找到错误代码行号:使用addr2line命令

示例:

addr2line -a 0x4007b6 -e demo

image-20220715224432993

回到我们的源文件,对应的位置。

image-20220715224503773


输入最后第一个地址会显示??:0暂时还未解决,还请知道的小伙伴评论区解答下。

image-20220715224845208

相关文章
|
15天前
|
运维 监控 Linux
BPF及Linux性能调试探索初探
BPF技术从最初的网络数据包过滤发展为强大的系统性能优化工具,无需修改内核代码即可实现实时监控、动态调整和精确分析。本文深入探讨BPF在Linux性能调试中的应用,介绍bpftune和BPF-tools等工具,并通过具体案例展示其优化效果。
41 14
|
1月前
|
缓存 NoSQL Linux
Linux调试
本文介绍了Linux调试、性能分析和追踪的培训资料,涵盖调试、性能分析和追踪的基础知识及常用工具。
245 6
Linux调试
|
4月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
1月前
|
缓存 监控 Linux
|
1月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
1月前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
93 1
|
4月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
70 10
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
156 3
|
4月前
|
Ubuntu Linux
内核实验(四):Qemu调试Linux内核,实现NFS挂载
本文介绍了在Qemu虚拟机中配置NFS挂载的过程,包括服务端的NFS服务器安装、配置和启动,客户端的DHCP脚本添加和开机脚本修改,以及在Qemu中挂载NFS、测试连通性和解决挂载失败的方法。
275 0
内核实验(四):Qemu调试Linux内核,实现NFS挂载
|
4月前
|
监控 网络协议 Linux
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?