Backtrace调试
/*
* 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调试相关推荐
- backtrace调试程序段错误
1.backtrace的用处 一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆 ...
- linux中GDB详细使用手册
文章目录 代码调试记录 使用方法,在主目录下执行make 准备 显示寄存器 单步执行 继续执行 监视点 删除断点和监视点 生成核心转存储文件 attach 到进程 detach 与进程分离 条件断点 ...
- 了解Scaffold Generator (转载)
了解Scaffold Generator "支架""生成器"使用Rails 的动态"支架"(scaffold :somemodel) 可写出 ...
- Valgrind动态分析工具
目录 Valgrind的简介 Valgrind的使用方法 1. 使用步骤 1.1 编译程序 1.2 用Valgrind运行程序 2. 错误类型 2.1 illegal read 非法读 / illeg ...
- Address Sanitizer 用法
Address Sanitizer(ASan)是一个快速的内存错误检测工具.这里说明它的用法. 参考资料 AddressSanitizer https://github.com/google/sani ...
- 【内存】内存检测工具sanitizer[内存泄漏、内存越界] VS valgrind
简介 Sanitizers是谷歌发起的开源工具集,包括了AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer,Saniti ...
- 关于ceph源码 backtrace 打印函数调用栈
当集中精力看一个问题的时候,时间久了就会有这样一个状态,天空飘来五个字,那都不算事 ceph源码庞大的体量以及复杂的设计让很多人望而却步,尤其是大量的纯虚函数更是让读者迷失在代码的海洋,这个时候函数调 ...
- GDB调试--以汇编语言为例
#rpm -qa |grep gdb 下载: 安装 #tar -zxvf #./configure #make 使用GDB 以汇编语言调试为例 汇编语言实现CPUID指令 CPUID cpuid是I ...
- 软件调试的艺术笔记:GDB
很久之前,在https://blog.csdn.net/fengbingchun/article/details/41413381中简单整理过gdb中常用的一些命令,不齐全,这里按照<软件调试的 ...
最新文章
- Kotlin 一个好用的新功能:Parcelize
- python中国大学排名爬虫写明详细步骤-Python之爬虫-中国大学排名
- stl中copy()函数_std :: rotate_copy()函数以及C ++ STL中的示例
- 鼠标浮动到表格的某行 背景颜色变化[mouseover mouseout 以及mouseenter mouseleave]
- C#/ASP.NET完善的DBHelper,配套Model生成器
- winfrom datagridview中DataGridViewTextBoxColumn的联动处理
- pxe结合kickstart文件实现全自动化安装
- 计算机应用技术作业答案,计算机应用与技术网上作业题参考答案20121109
- 无线路由器 tftp服务器怎么开启,水星路由器tftp服务器怎么开启
- [网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
- 各类花里胡哨的XSS攻击举例解读(正在持续更新中~)
- 隐匿在数据结构背后的原理
- 计算机wifi共享怎么设置,电脑怎么共享wifi热点 电脑设置wifi热点教程
- 过大年,和人工智能一起对对联!
- 【MM模块】Credit Memos and Reversals 红字发票和冲销
- 动手实现天气预报App(二)——显示天气信息
- 随笔---Beego中的routers包个人的理解
- 户外生活--香八拉之(黑石头至白家疃)
- 我自己动手写一个网页收藏站,你说行不行?【html+css+js】#谭子
- android 定位服务和wifi,android WIFI定位和基站定位实现
热门文章
- SpringCloud最新教程IDEA版笔记
- 用Vue实现简单的echarts在线编辑器
- latx引用bib文献,使用破折号出问题
- 将群晖NAS加入域控,来点企业级应用
- 音诺恒科技RK3566安卓主板智能自助终端主板方案集合
- Linux学习-3-作业的自动调度
- js实现新浪微博评论
- no server suitable for synchronization found
- 5月SCI/SSCI/EI最新优质刊源合集(含CCF推荐,1-2区TOP期刊)
- 太原哪个学校计算机考研最好考,考研最好考的211大学 考研难度最低的211大学...