具体参考文档:https://blog.csdn.net/gatieme/article/details/84189280

测试Demo:

#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <stddef.h> void print_trace(void)
{
void* array[30];
size_t size;
char** strings;
size_t i; size = backtrace(array, 30);
strings = backtrace_symbols(array, size);
if (NULL == strings)
{
perror("backtrace_symbols");
exit(EXIT_FAILURE);
} printf("Obtained %zd stack frames.\n", size); for(i = 0 ; i < size; i++)
{
printf("%s\n", strings[i]);
} free(strings);
strings = NULL; exit(EXIT_SUCCESS);
} void sighandler_dump_stack(int sig)
{
psignal(sig, "handler"); // 打印信号相关信息
print_trace();
signal(sig, SIG_DFL); // 恢复信号默认处理
raise(sig); // 继续后续的流程
} void dumy_function(void)
{
print_trace();
} void func_c()
{
*((volatile int*)0x00) = 0x100;
} void func_b()
{
func_c();
} void func_a()
{
func_b();
} int main(int argc, char* argv[])
{
if (signal(SIGSEGV, sighandler_dump_stack) == SIG_ERR)
perror("signal failed"); // 在标准错误输出上打印格式: 自定义信息(调用函数名+failed): errno的具体描述 func_a();
return 0;
}

使用注意事项:

编译时,需要加上

  • -g : 增加调试信息
  • -rdynamic : 增加符号名称支持

得到段错误时,如何定位错误

在查看堆栈前,进入捕获 SIGSEGV 信号自定义函数前的地址addr,再根据

查看异常函数位置:

  • add32line -C -f -e ./exe_name addr

    输出如下:

查看发生异常的函数源码信息

  • objdump -DS ./handler | grep -6 "400c74"

    输出如下:

利用Backtrace来捕获段错误堆栈信息的更多相关文章

  1. C/C++捕获段错误,打印出错的具体位置(精确到哪一行)

    修订:2013-02-16 其实还可以使用 glibc 的 backtrace_symbols 函数,把栈帧各返回地址里面的数字地址翻译成符号描述的 修订:2011-06-11 背景知识: · 在li ...

  2. C/C++捕获段错误,打印出错的具体位置(精确到哪一行)_转

    转自:C/C++捕获段错误,打印出错的具体位置(精确到哪一行) 修订:2013-02-16 其实还可以使用 glibc 的 backtrace_symbols 函数,把栈帧各返回地址里面的数字地址翻译 ...

  3. logger.error打印完整的错误堆栈信息

    使用Spring Boot项目中的日志打印功能的时候,发现调用Logger.errror()方法的时候不能完全地打印出网站的错误堆栈信息,只能打印出这个错误是一个什么错误. 为什么呢,原因在于这个方法 ...

  4. 在java中捕获异常时,使用log4j打印出错误堆栈信息

    当java捕获到异常时,把详细的堆栈信息打印出来有助于我们排查异常原因,并修复相关bug,比如下面两张图,是打印未打印堆栈信息和打印堆栈信息的对比: 那么在使用log4j输出日志时,使用org.apa ...

  5. 利用Xposed Hook打印Java函数调用堆栈信息的几种方法

    本文博客链接:http://blog.csdn.net/QQ1084283172/article/details/79378374 在进行Android逆向分析的时候,经常需要进行动态调试栈回溯,查看 ...

  6. logger.error完整打印错误堆栈信息

    所以我们的写法可以是: Logger.error("xxx出错" , e); //第二个参数是e 而不是: Logger.error("xxx出错:" + e) ...

  7. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

  8. linux下利用backtrace追踪函数调用堆栈以及定位段错误

    一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的. 在glibc ...

  9. Linux下利用backtrace追踪函数调用堆栈以及定位段错误[转]

    来源:Linux社区  作者:astrotycoon 一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序 ...

随机推荐

  1. php parse_url 解析URL并返回其组成部分

    [导读] php parse_url 函数教程parse_url ( PHP 4中, PHP 5中) parse_url -解析URL并返回其组成部分 描述 混合parse_url (字符串$网址[摘 ...

  2. React系列文章:Webpack模块组织关系

    现代前端开发离不开打包工具,以Webpack为代表的打包工具已经成为日常开发必备之利器,拿React技术栈为例,我们ES6形式的源代码,需要经过Webpack和Babel处理,才能生成发布版文件,在浏 ...

  3. 喵哈哈村的魔法考试 Round #10 (Div.2) 题解

    喵哈哈村与哗啦啦村的大战(一) 最大值就是全部+3,最小值就是全部-3,注意不能降为负数. #include<bits/stdc++.h> using namespace std; con ...

  4. 利用Delphi编写IE扩展

    就是如何使IE扩展组件可以响应事件.    在自己的程序中使用过WebBrowser控件的朋友都知道,WebBrowser控件定义了诸如BeforeNavigate.DownloadComplete ...

  5. lib32asound2 : Depends: libc6-i386 (>= 2.7) but it is not going to be installed

    sudo apt-get install -f sudo dpkg --configure -a sudo apt-get clean sudo apt-get update sudo apt-get ...

  6. 如何在本地搭建一个Android应用crashing跟踪系统-ACRA

    https://github.com/bboyfeiyu/android-tech-frontier/tree/master/others/%E5%A6%82%E4%BD%95%E5%9C%A8%E6 ...

  7. boost python3依赖安装

    之前写过python dlib依赖的安装,当时是使用了系统默认的python2.7安装的boost.Python,如果自己编译好python3,想安装支持python3的boost.Python也是可 ...

  8. IOS Using UIAlertView to show alerts

    UIAlertView in other words, it's a dialog box. You want to show a message or ask user to confirm an ...

  9. Spark机器学习(10):ALS交替最小二乘算法

    1. Alternating Least Square ALS(Alternating Least Square),交替最小二乘法.在机器学习中,特指使用最小二乘法的一种协同推荐算法.如下图所示,u表 ...

  10. 【Babble】批量学习与增量学习、稳定性与可塑性矛盾的乱想

    一.开场白 做机器学习的对这几个词应该比较熟悉了. 最好是拿到全部数据,那就模型慢慢选,参数慢慢调,一轮一轮迭代,总能取得不错效果. 但是面对新来数据,怎么能利用已经训练好的模型,把新的信息加进去? ...