/*
* DUMP使用注意事项:
* 1. 编译选项 -g -funwind-tables -ffunction-sections
* 2. 链接参数 -rdynamic
* 3. 去掉代码优化编译选项 -On
* 4. 去掉栈指针优化选项 -fomit-frame-pointer
* 5. 动态库地址需要减去load基地址
* 6. 查看命令addr2line -e app.bin(执行文件或so库文件) 0xFFFF(地址)
*/
void dump_backtrace()
{void* buffer[200];int size = backtrace(buffer, sizeof(buffer));printf("\nbacktrace() returned %d addresses\n", size);char ** info = backtrace_symbols(buffer, size);for (int i=0; i<size; ++i)fprintf(stderr, "[%02d] %s\n", i, info[i]);free(info);exit(0);
}void dump_library_maps()
{printf("dynamic library maps:\n");char maps[128] = {0x00};snprintf(maps, sizeof(maps), "cat /proc/%d/maps", getpid());system(maps);
}void signal_handler(int signo, siginfo_t *info, void *ptr)
{printf("\n=========>>>catch signal %d <<<=========\n", signo);printf("trigger address: %p\n\n", info->si_addr);printf("************* backtrace ******************\n");dump_library_maps();printf("\n");dump_backtrace();printf("***************backtrace end********************\n");//signal(signo, SIG_DFL); //恢复默认处理 raise(signo);             //再发一次信号
}void watch_signal()
{//signal(SIGSEGV, signal_handler);struct sigaction act;sigemptyset(&act.sa_mask);act.sa_flags = SA_SIGINFO | SA_RESETHAND;act.sa_sigaction = signal_handler;sigaction(SIGSEGV, &act, NULL);
}

Backtrace调试相关推荐

  1. backtrace调试程序段错误

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

  2. linux中GDB详细使用手册

    文章目录 代码调试记录 使用方法,在主目录下执行make 准备 显示寄存器 单步执行 继续执行 监视点 删除断点和监视点 生成核心转存储文件 attach 到进程 detach 与进程分离 条件断点 ...

  3. 了解Scaffold Generator (转载)

    了解Scaffold Generator "支架""生成器"使用Rails 的动态"支架"(scaffold :somemodel) 可写出 ...

  4. Valgrind动态分析工具

    目录 Valgrind的简介 Valgrind的使用方法 1. 使用步骤 1.1 编译程序 1.2 用Valgrind运行程序 2. 错误类型 2.1 illegal read 非法读 / illeg ...

  5. Address Sanitizer 用法

    Address Sanitizer(ASan)是一个快速的内存错误检测工具.这里说明它的用法. 参考资料 AddressSanitizer https://github.com/google/sani ...

  6. 【内存】内存检测工具sanitizer[内存泄漏、内存越界] VS valgrind

    简介 Sanitizers是谷歌发起的开源工具集,包括了AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer,Saniti ...

  7. 关于ceph源码 backtrace 打印函数调用栈

    当集中精力看一个问题的时候,时间久了就会有这样一个状态,天空飘来五个字,那都不算事 ceph源码庞大的体量以及复杂的设计让很多人望而却步,尤其是大量的纯虚函数更是让读者迷失在代码的海洋,这个时候函数调 ...

  8. GDB调试--以汇编语言为例

    #rpm -qa |grep  gdb 下载: 安装 #tar -zxvf #./configure #make 使用GDB 以汇编语言调试为例 汇编语言实现CPUID指令 CPUID cpuid是I ...

  9. 软件调试的艺术笔记:GDB

    很久之前,在https://blog.csdn.net/fengbingchun/article/details/41413381中简单整理过gdb中常用的一些命令,不齐全,这里按照<软件调试的 ...

最新文章

  1. Kotlin 一个好用的新功能:Parcelize
  2. python中国大学排名爬虫写明详细步骤-Python之爬虫-中国大学排名
  3. stl中copy()函数_std :: rotate_copy()函数以及C ++ STL中的示例
  4. 鼠标浮动到表格的某行 背景颜色变化[mouseover mouseout 以及mouseenter mouseleave]
  5. C#/ASP.NET完善的DBHelper,配套Model生成器
  6. winfrom datagridview中DataGridViewTextBoxColumn的联动处理
  7. pxe结合kickstart文件实现全自动化安装
  8. 计算机应用技术作业答案,计算机应用与技术网上作业题参考答案20121109
  9. 无线路由器 tftp服务器怎么开启,水星路由器tftp服务器怎么开启
  10. [网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
  11. 各类花里胡哨的XSS攻击举例解读(正在持续更新中~)
  12. 隐匿在数据结构背后的原理
  13. 计算机wifi共享怎么设置,电脑怎么共享wifi热点 电脑设置wifi热点教程
  14. 过大年,和人工智能一起对对联!
  15. 【MM模块】Credit Memos and Reversals 红字发票和冲销
  16. 动手实现天气预报App(二)——显示天气信息
  17. 随笔---Beego中的routers包个人的理解
  18. 户外生活--香八拉之(黑石头至白家疃)
  19. 我自己动手写一个网页收藏站,你说行不行?【html+css+js】#谭子
  20. android 定位服务和wifi,android WIFI定位和基站定位实现

热门文章

  1. SpringCloud最新教程IDEA版笔记
  2. 用Vue实现简单的echarts在线编辑器
  3. latx引用bib文献,使用破折号出问题
  4. 将群晖NAS加入域控,来点企业级应用
  5. 音诺恒科技RK3566安卓主板智能自助终端主板方案集合
  6. Linux学习-3-作业的自动调度
  7. js实现新浪微博评论
  8. no server suitable for synchronization found
  9. 5月SCI/SSCI/EI最新优质刊源合集(含CCF推荐,1-2区TOP期刊)
  10. 太原哪个学校计算机考研最好考,考研最好考的211大学 考研难度最低的211大学...