定位crash的问题
一般都要符号化crash日志,但是低内存奔溃却没有堆栈日志
A Low Memory report differs from other crash reports in that there are no backtraces in this type of report. When a low memory crash happens, you must investigate your memory usage patterns and your responses to low memory warnings. This document points to you several memory management references that you might find useful.
内存低的崩溃日志,有一个进程表,列有几种原因。如果没有,可能就不是内存低导致的崩溃,请使用VM Tracker工具来检查。
[per-process-limit]: The process crossed its system-imposed memory limit. Per-process limits on resident memory are established by the system for all applications. Crossing this limit makes the process eligible for termination.
Note: Extensions have much lower per-process memory limit. Certain technologies, such as map views and SpriteKit, carry a high baseline memory cost and may be unsuitable for use in an extension.
[vm-pageshortage]/[vm-thrashing]/[vm]: The process was killed due to memory pressure.
[vnode-limit]: Too many files are open.
Note: The system avoids killing the frontmost app when vnodes are nearly exhausted. This means that your application, when in the background, may be terminated even if it is not the source of excess vnode usage.
[highwater]: A system daemon crossed its high water mark for memory usage.
[jettisoned]: The process was jettisoned for some other reason.
一般来说,xcode都会自动化符号化,如果没有(比如是从itunes上下载dSYM),可以手动符号化
xcrun dsymutil -symbol-map
xcrun dsymutil -symbol-map ~/Library/Developer/Xcode/Archives/2017-11-23/MyGreatApp\ 11-23-17\,\ 12.00\ PM.xcarchive/BCSymbolMaps ~/Downloads/dSYMs/3B15C133-88AA-35B0-B8BA-84AF76826CE0.dSYM |
xcode符号化需要三种条件
1. APP二进制文件和dSYM
2. 自定义的framework对应的二进制与dSYM
3. 与APP崩溃是的运行OS对应的符号,符号表是与OS相关的。
缺少一个都导致无法完全符号化。
第三方的framework,需要第三方提供作者创建的dSYM文件。
The binaries and
dSYM
files for all custom frameworks that the application links against. For frameworks that were built from source with the application, theirdSYM
files are copied into the archive alongside the application'sdSYM
file. For frameworks that were built by a third-party, you will need to ask the author for thedSYM
file.
没有符号化就要使用atos
Symbolicating Crash Reports With atos
The atos command converts numeric addresses to their symbolic equivalents. If full debug symbol information is available then the output of
atos
will include file name and source line number information. Theatos
command can be used to symbolicate individual addresses in the backtrace of an unsymbolicated, or partially symbolicated, crash report. To symbolicate a part of a crash report usingatos
:
根据Binary Image的UUID找到对应的dSYM
1. 在崩溃日志里面,使用命令行快速找到UUID这一行。
$ grep --after-context= "Binary Images:" <Path to Crash Report> | grep <Binary Name>
2. 32位的UUID转换格式为 8-4-4-4-12 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
). 全部为大写字母。
3. 使用mfind寻找dSYM文件,其中格式是包括尖括号的
$ mdfind "com_apple_xcode_dsym_uuids == <UUID>"
如果找到对应的dSYM文件,xcode不能解析,这个就是xcode的bug。
如果找不到对应的dSYM文件,检查是否下载对了文件。使用命令行查看Binary Image的UUID
xcrun dwarfdump --uuid <Path to dSYM file>
这个是一个使用例子:
1. 打开xcode
2. 获取APP
ljydeMacBook-Pro:~ admin$ cd /Users/admin/Library/Developer/Xcode/DerivedData/rcpi-hcfcbslblbqkydeyajzrmaoddwou/Bui ld/Products/Debug-iphoneos
ljydeMacBook-Pro:Debug-iphoneos admin$ ls
ProtocolBuffers.framework cwf.framework iwf.framework.dSYM xxx.app
ProtocolBuffers.framework.dSYM iwf.framework libjscocos2d iOS.a xxx.swiftmodule
确保APP的架构版本是跟崩溃的APP的是一样的。
3. 确定版本, 找到你的应用XXX.app文件 通过应用“终端、Terminal” 查看其UUID
在命令行输入“dwarfdump --uuid XXX.app/XXX”
4.定位错误
直接在终端中输入以下命令“atos -o XXX.app/XXX -arch arm64 xxxxxxxx ”
ljydeMacBook-Pro:Debug-iphoneos admin$ atos -o rcpi.app/rcpi -arch arm64 0x0000000100e57fb0 0x0000000100e7e374 0x0000000100e7da38 0x0000000100e7b1d8
tx_ABGRToUVRow_C (in rcpi) +
-[TXLiveBeauty addBeautyTarget] (in rcpi) +
txrtmp_soundtouch::TDStretch::seekBestOverlapPositionQuick(short const*) (in rcpi) +
-[TXLivePushSingleton createPixelBufferAt:width:height:pixelFormatType:] (in rcpi) +
定位crash的问题的更多相关文章
- 利用.dSYM跟.app文件准确定位Crash位置
本文转载至 http://blog.csdn.net/lvxiangan/article/details/28102629 利用.dSYM和.app文件准确定位Crash位置首先,确保 ...
- Xcode如何快速定位crash的位置?
最近发现经常有人程序崩掉后不知道怎么定位crash的位置 如何快速定位crash的位置? 选择右箭头 选择Add Exception Breakpoint 这样如果你的app再crash就会自动定位到 ...
- iOS crash 追终 ,iOS 如何定位crash 位置
https://developer.apple.com/library/ios/technotes/tn2151/_index.html 错误分析是基于设备中的crash log 与 编译文件时生成的 ...
- 【转】 利用.dSYM和.app文件准确定位Crash位置
http://blog.csdn.net/jinzhu117/article/details/20615991 首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的 ...
- Linux内核crash/Oops异常定位分析方法
在内核开发的过程中,经常会碰到内核崩溃,比如空指针异常,内存访问越界.通常我们只能靠崩溃之后打印出的异常调用栈信息来定位crash的位置和原因.总结下分析的方法和步骤. 通常oops发生之后,会在串口 ...
- ios系统crash文件分析
分析crash文件必备条件:crash文件的uuid,app的uuid,dsym文件的uuid必须一致 1> crash文件的uuid为Binary Images:0x4000 - 0x1173 ...
- 【转】调试Release发布版程序的Crash错误
http://www.cppblog.com/Walker/archive/2012/11/08/146153.html http://blog.sina.com.cn/s/blog_48f93b53 ...
- 调试Release发布版程序的Crash错误
http://www.cppblog.com/Walker/archive/2012/11/08/146153.html http://blog.sina.com.cn/s/blog_48f93b53 ...
- 调试Release发布版程序的Crash错误(转)
http://blog.sina.com.cn/s/blog_48f93b530100fsln.html 在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问 ...
随机推荐
- 使用 vm 加载文件中的数据到变量里面
.json 不能写注释, 还需要严格的双引号 或者使用 .json5 // test.db [ // name {name: 1} ] // test.js const fs = require('f ...
- ERP项目实施记录02
今天去第三方公司(B公司)考察: 公司成立:2011年12月 注册地:深圳 深圳:2~3个业务员 东莞:5个开发人员,据说也是实施人员 全功能者:BOSS A公司因战略调整,要将业务"下放& ...
- 洛谷P1162 填涂颜色【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1162 题意: 有一个0和1组成的矩阵,一些1组成一个闭合圈,圈住一些0,现在要把被圈住的这些0变成2输出. ...
- js模拟浏览器加载效果 pace.js 中文官方文档
2017年2月20日12:11:25 官网URL:http://github.hubspot.com/pace/docs/welcome/ 文档 http://github.hubspot.com/p ...
- C#中字符串转换为计算公式(自定义公式的计算)
第一种解决方案 第一种也是功能最强大的一种,可以使用Eval函数,像在Java中一样强大,几乎所有的运算符都可以实现,包括四则运算,与或非等. 添加COM引用: private void button ...
- webkit下面的CSS设置滚动条
webkit下面的CSS设置滚动条 1.主要有下面7个属性: ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端 ...
- vim操作表
- Etcd+Confd实现Nginx配置文件自动管理
一.需求 我们使用Nginx做七层负载均衡,后端是Tomcat.项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间 ...
- .NET工程师必须掌握的知识点
Microsoft SQL Server 数据库 一.创建和维护数据库 1.数据库 SQL Server 数据库的组成部分?(参见联机丛书) 如何保证数据库的完整性.安全性.并发性? 数据库设计创建步 ...
- 对内存分配的理解 自动变量 局部变量 临时变量 外部变量 字符串长度 C语言可以看成由一些列的外部对象构成
Status ListInsert_Sq(SqList *L,int i,LElemType_Sq e) { LElemType_Sq *newbase; LElemType_Sq *p,*q; if ...