[转帖]程序运行崩溃(segfault)的排查方法
这篇博文记录的非常详细:https://blog.csdn.net/zhaohaijie600/article/details/45246569
我的笔记:
写的C++程序老是运行两三天就挂了,关键是挂的时候连“segment fault”都不显示。动用了gdb、valgrind还是没办法,最后还是根据系统的日志定位到了问题。
首先,最好是在编译时加上debug选项(-g)。
程序挂掉后,在终端通过指令
-
dmesg
-
#或者
-
dmesg | grep 你的程序名
在系统日志中查找到相关的信息。
随便写个例子:
a.out[2374]: segfault at 7f0ed0bfbf70 ip 00007f0edd646fe7 sp 00007f0ed3603978 error 4 a.out[7f0edd514000+1b6000]
at(位置),ip(instruction pointer 指令指针),sp(stack pointer 堆指针),后面跟的都是地址。
对这三个地址分别执行
addr2line -e a.out xxxxxxxx
这里的“xxxxxxxx”就是上面的“7f0ed……”,前面的0可以省略,三个地址都试一下。如果成功了,终端会打印出来这个地址对应的代码行(前面提到编译时要加-g)。
这里的“error 4”是什么意思?把它更换成二进制表示,就是:100。说明是用户态内存访问越界了
bit2:值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界
bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界
bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址
然后就去找问题啦。如果是自己代码的问题,上面执行“addr2line”的时候就直接把出错的代码行号都给出来了;如果是动态库的问题,可以借鉴上面链接博客里的经验。
</article>
[转帖]程序运行崩溃(segfault)的排查方法的更多相关文章
- VC 获 取 当前程序运行路径的几种方法
1.使用APi函数GetModuleFileName char path[MAX_PATH]; GetModuleFileName(NULL, path, MAX_PATH); //获取 ...
- Qt5+MSVC2015编译器编译发布的Release程序运行崩溃,如何查找崩溃的原因??
除了加log信息,还有什么方法?? ==================================2019/4/26============================= 1 常见的c++内 ...
- [转+补]Android打包so后魅族5中安装运行崩溃问题的解决方法
上周在做噪音检测so集成中,遇到不同的so库打包到 APK 时,安装在某些机器上,出现 java.lang.UnsatisfiedLinkError 加载失败. 为此,深究了一下原理,和给出了解决方案 ...
- deepin可视化程序打不开问题排查方法
anyconnect是一个VPN软件,在deepin系统下安装完成之后,并不能够直接使用,点击启动图标之后没有反应. 要想分析问题,必须从命令行入手,错误会打印在控制台. 如何根据一个图标来找到一个程 ...
- 【Crash】C++程序崩溃排查方法
windows下C++程序release版本崩溃错误排查方法. 一个你精心设计的24小时不间断运行,多线程的程序,突然运行了几个月后崩了,此问题是非常难以排查的,也是很头疼的问题. 现利用Google ...
- Android DevArt4:IntentFilter学习及深入~问题描述:在不指定具体action前提下,如果有两个以上的Activity,具有完全相同的intent-filter,项目同步是否会出现异常?程序运行是否会崩溃?
概述:GitHub IntentFilter意图过滤器,三种匹配规则:action.category.data 重点:过滤规则中必须设置 '<category android:name=&quo ...
- linux下实现在程序运行时的函数替换(热补丁)
声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的. ...
- 放在NSArray、NSDictionary等容器内的对象Item,Item中的property在程序运行过程中被无故释放
可能是被释放的property本身是OC对象而它的属性被误写成assign,例如: @interface MyItem : Object @property (nonatomic, assign) N ...
- java应用死循环排查方法或查找程序消耗资源的线程方法(面试)
今天遇到一个面试,怎么在一堆线程中查找一个死循环? 如果遇到线上应用cpu飙升,并出现OutOfMemery怎么办? 首先线上应用的jvm配置要养成良好的习惯,增加一下配置则可以在jvm发生 oom的 ...
- [转]让程序在崩溃时体面的退出之SEH+Dump文件
原文地址:http://blog.csdn.net/starlee/article/details/6649605 在我上篇文章<让程序在崩溃时体面的退出之SEH>中讲解了SEH中try/ ...
随机推荐
- EDS从小白到专家丨生态产业链高效协同的一计良策
本文分享自华为云社区<[EDS从小白到专家]第3期:生态产业链高效协同的一计良策>,作者:开天aPaaS小助手 . 号外! 华为将于2023年9月20-22日,在上海世博展览馆和上海世博中 ...
- 论文分享丨Holistic Evaluation of Language Models
摘要:该文为大模型评估方向的综述论文. 本文分享自华为云社区<[论文分享]<Holistic Evaluation of Language Models>>,作者:DevAI. ...
- tsconfig.json在配置文件中找不到任何输入,怎么办?
摘要:原来在我们创建tsconfig.json文件的时候,VSCode会自动检测当前项目当中是否有TS文件:如果没有的话,就会报这个错提示我们去创建一个文件,再去使用. 本文分享自华为云社区<t ...
- ios安全加固 ios 加固方案
目录 一.iOS加固保护原理 1.字符串混淆 2.类名.方法名混淆 3.程序结构混淆加密 4.反调试.反注入等一些主动保护策略 二 代码混淆步骤 1. 选择要混淆保护的ipa文件 2. 选择要混淆 ...
- 火山引擎DataLeap背后的支持者 - 工作流编排调度系统FlowX
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景介绍 业务场景 在日常工作中,我们时不时需要对某些逻辑进行重复调度,这时我们就需要一个调度系统.根据不同的调度 ...
- PPT 插件
https://www.aboutppt.com/ 小顽简报 https://www.yuque.com/wonvy/pptools/veu9yq https://pan.baidu.com/s/10 ...
- Mac 安装 cnpm
npm set registry https://registry.npm.taobao.org npm set disturl https://npm.taobao.org/dist npm cac ...
- CDS 重命名失败
当创建CDS视图,名称命名错误,后将视图名称更改后,激活报错(例如,第一次创建的视图名称为ZVWM014,后改为ZVMM014) SQL view ZVWM014 cannot be renamed ...
- Codeforce 318A - Even Odds(数学水题)
Being a nonconformist, Volodya is displeased with the current state of things, particularly with the ...
- 例题 5-7 丑数(Ugly Numbers,UVa 136)
题意: 丑数是一些因子只有2,3,5的数.数列1,2,3,4,5,6,8,9,10,12,15--写出了从小到大的前11个丑数,1属于丑数.现在请你编写程序,找出第1500个丑数是什么. 思路: 如果 ...