ios crash log

深入理解iOS Crash Log Crash Log Crash Log的主要来源有两种: Apple提供的,可以从用户设备中直接拷贝,或者从iTunes Connect(XCode)下载 三方或者自研Framework统计,三方服务包括Fabric,Bugly等。 这篇文章讲到的Crash Log是Apple提供的。 获取 设备获取 USB连接设备,接着在XCode菜单栏依次选择:Window ->... 阅读详情


ios crash log 经验汇总贴

symbolicatecrash 在 xcode 4.3中的位置(2012-04-19 17:02:15)

在xocde编译app的时候会同时生成一个以dsym作为后缀的文件,这个文件会记录app的crashlog,需要通过symbolicatecrash来查看,但是这个工具在xccode4.3的时候改变了存放的位置。
1.给xcode打一个补丁: 命令行运行 /usr/bin/xcode-select-print-path  
如果输出"/Developer"或者其他非"/Applications/Xcode.app/Contents/Developer/"的内容,运行下面的命令:sudo /usr/bin/xcode-select -switch/Applications/Xcode.app/Contents/Developer/
2.查找symbolicatecrash:find/Applications/Xcode.app -name symbolicatecrash -type f获取路径,我的是Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
在执行symbolicatecrash之前先切换到他的目录下: cd Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/

4.3之前1.直接find/Developer -name symbolicatecrash -typef 

2.切换到目录下,之后:./symbolicatecrash/somePath/MyCrashLogFile.crash/somePath/MyAppName.app.dSYM

 

大概说明一下是:

1.同步应用程序以后,找到你要查看的日志文件,日志文件对应mac的位置,xp\vista的位置.

2.发现日志文件都是看不懂的16进制,如何进行转换成我们看得懂的内容.

3.使用命令行工具 "symbolicatecrash"来进行转换,可以把 工具复制到任何地方都可以调用的路径:sudo cp/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash /usr/local/bin/

4.讲了 "symbolicatecrash" 工具怎么用.一般只要:symbolicatecrashreport.crashMobileLines.app.dSYM >report-with-symbols.crash,就可以了

5.注意说明的是,你在用Xcode debug打包的时候,会生成两个东西,一个是XXX.app,另一个是XXX.app.dSYM,这两个是相对应的,与我写的第4点里的MobileLines.app.dSYM是对应起来的.这里的日志文件必须是你打包的那个版本,不然就没有解析出你的日志文件了.通俗的说,你安装到手机上的app和这个dSYM,是配对的,如果你想要看这个手机上的日志文件,那你必须保存对应的dSYM文件去解析日志文件.每一次重新打包都会重新生成dSYM文件.

6.好了,你可以根据你的 report-with-symbols.crash,日志文件来看看你的程序哪里出问题了

Sometimes programs crash. This annoys users and developers alike. Users are frustrated because they cannot use crashing software, developers are frustrated because they have to hunt bugs instead of doing something creative and rewarding. How do we communicate if an iPhone application crashes?

I’ll start with a disclaimer. I’m not sure whether the information provided in this post is covered by iPhone Developer Program NDA or not. If it is, the post will be removed. Secondly, this post is a result of googling, so I haven’t invented anything new here.

Working with crash logs typically involves certain interaction between developers and users, unless they are automagically sent to the developer. First of all, the user should get the crash log and send it to the developer, who should examine it, find the bug and fix it.

iPhone OS and Mac OS X are remarkably similar architectures. Both store crash logs to help identify crashing bugs. The difference between the two is how users retrieve them. On Mac OS X every user has unrestricted access to crash logs related to the applications she runs. The iPhone does not even have a file browser. What to do? iTunes comes to the rescue.

Whenever you synchronize your iPhone or iPod Touch, all the crash logs are transferred to your computer. Here are their locations:

  • Mac OS X:~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME>
  • Windows XP:C:\Documents and Settings\<USERNAME>\Application Data\Apple computer\Logs\CrashReporter/<DEVICE_NAME>
  • Windows Vista:C:\Users\<USERNAME>\AppData\Roaming\Apple computer\Logs\CrashReporter/MobileDevice/<DEVICE_NAME>

The log file names start with application name and have the extension “crash”. They are just plain text files and can be sent by e-mail in original or zipped form, or even copy-pasted into your e-mail program.

The second part is trickier. Both Apple and common sense suggest that all AppStore binaries are shipped with stripped symbols. If you ever saw a crash log like this, read on:

Thread 0 Crashed:0 libobjc.A.dylib 0x300c87ec 0x300bb000 + 552761 MobileLines 0x00006434 0x1000 + 215562 MobileLines 0x000064c2 0x1000 + 216983 UIKit 0x30a740ac 0x30a54000 + 1312444 UIKit 0x30a66110 0x30a54000 + 740005 UIKit 0x30a6565c 0x30a54000 + 712606 GraphicsServices 0x3169b0b4 0x31696000 + 206607 GraphicsServices 0x3169d818 0x31696000 + 307448 IOMobileFramebuffer 0x31f3e8f8 0x31f3d000 + 63929 com.apple.framework.IOKit 0x30f342b8 0x30f30000 + 1708010 CoreFoundation 0x3025ced4 0x30229000 + 21269211 CoreFoundation 0x3025bed6 0x30229000 + 20859812 CoreFoundation 0x3025b584 0x30229000 + 20621213 GraphicsServices 0x316998e4 0x31696000 + 1456414 UIKit 0x30a5e308 0x30a54000 + 4173615 UIKit 0x30a671dc 0x30a54000 + 7830016 MobileLines 0x00002090 0x1000 + 424017 MobileLines 0x0000202c 0x1000 + 4140

In a nutshell, it contains function addresses and offsets instead of function names and line numbers. The structure is obvious, but, to be honest, I don’t know what“MobileLines 0×00006434 0×1000 + 21556″ is, even though I have all the source code. Thanks to Apple Developer Tools and to Craig Hockenberry whowrote about it, we have a perfect solution called symbolicatecrash.

I copied it to/usr/local/bin/so that I can run it whenever I want without trying to remember its original location (you may prefer a symbolic link):
$ sudo cp /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/symbolicatecrash /usr/local/bin/

Running this script with the-h option provides the minimal help:

$ symbolicatecrash -h
usage:

    symbolicatecrash [-Ah] LOGFILE [SYMBOL_PATH ...]

    Symbolicates a crashdump LOGFILE which may be "-" to refer
  to stdin. By default, all heuristics will be employed
  in an attempt to symbolicate all addresses. Additional
  symbol files can be found under specified directories.

Options:
    -A  Only symbolicate the application, not libraries
    -h  Display this message
    -v  Verbose

To add symbols to the crash log you need the dSYM file generated by the linker when you compiled your application for AppStore. In other words, when you build for AppStore you should keep the dSYM package in a safe place backed up by Time Machine. This is very important.You should keep a copy of the dSYM for each version of your application ever shipped. If you have the package, translating code offsets to function names with line numbers has never been easier:

$ symbolicatecrash report.crash MobileLines.app.dSYM > report-with-symbols.crash

Here is the result:

Thread 0 Crashed:0 libobjc.A.dylib 0x300c87ec objc_msgSend + 201 MobileLines 0x00006434 -[BoardView setSelectedPiece:] (BoardView.m:321)2 MobileLines 0x000064c2 -[BoardView touchesBegan:withEvent:] (BoardView.m:349)3 UIKit 0x30a740ac -[UIWindow sendEvent:] + 2644 UIKit 0x30a66110 -[UIApplication sendEvent:] + 2485 UIKit 0x30a6565c _UIApplicationHandleEvent + 40886 GraphicsServices 0x3169b0b4 PurpleEventCallback + 4287 GraphicsServices 0x3169d818 HeartbeatVBLCallback + 1528 IOMobileFramebuffer 0x31f3e8f8 IOMobileFramebufferNotifyFunc + 1249 com.apple.framework.IOKit 0x30f342b8 IODispatchCalloutFromCFMessage + 30410 CoreFoundation 0x3025ced4 __CFMachPortPerform + 7211 CoreFoundation 0x3025bed6 CFRunLoopRunSpecific + 236412 CoreFoundation 0x3025b584 CFRunLoopRunInMode + 4413 GraphicsServices 0x316998e4 GSEventRunModal + 26814 UIKit 0x30a5e308 -[UIApplication _run] + 40415 UIKit 0x30a671dc UIApplicationMain + 106416 MobileLines 0x00002090 main (main.m:16)17 MobileLines 0x0000202c start + 44

Now, this ismuch better. Happy debugging!

Other useful references:

 

gdb查看:

如果采用上述方法还是解析不出来,则可以利用gdb来解析:

方法如下:还是在.app,和.dSYM目录下,

打开终端,输入:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin 打包的.app/MyApp

要想显示在哪个类,哪一行,则使用:

(gdb) set print symbol-filename on

(gdb) p/a 0x0002b0ee

 

这里0x0002b0ee 是你报错程序的错误,如:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                   0x34bc8c9a objc_msgSend + 18
1   UIKit                             0x34309146 -[UIViewController didReceiveMemoryWarning] + 10
2   UIKit                             0x3430915c -[UIViewController _didReceiveMemoryWarning:] + 8
3   Foundation                        0x36b7d17c _nsnote_callback + 136
4   CoreFoundation                    0x355bb208 __CFXNotificationPost_old + 396
5   CoreFoundation                    0x35555ee4 _CFXNotificationPostNotification + 112
6   Foundation                        0x36b7a5cc -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
7   Foundation                        0x36b7c1ba -[NSNotificationCenter postNotificationName:object:] + 18
8   UIKit                             0x342df35a -[UIApplication _performMemoryWarning] + 42
9   UIKit                             0x342dfd7c -[UIApplication _receivedMemoryNotification] + 120
10  UIKit                             0x342dd500 _memoryStatusChanged + 36
11  CoreFoundation                    0x355bbd62 __CFNotificationCenterDarwinCallBack + 18
12  CoreFoundation                    0x355b8bd8 __CFMachPortPerform + 204
13  CoreFoundation                    0x355c3a90 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20
14  CoreFoundation                    0x355c5838 __CFRunLoopDoSource1 + 160
15  CoreFoundation                    0x355c6606 __CFRunLoopRun + 514
16  CoreFoundation                    0x35556ebc CFRunLoopRunSpecific + 224
17  CoreFoundation                    0x35556dc4 CFRunLoopRunInMode + 52
18  GraphicsServices                  0x3417d418 GSEventRunModal + 108
19  GraphicsServices                  0x3417d4c4 GSEventRun + 56
20  UIKit                             0x341b4d62 -[UIApplication _run] + 398
21  UIKit                             0x341b2800 UIApplicationMain + 664
22  PABankiPad                        0x00002618 0x1000 + 5656
23  PABankiPad                        0x000025cc 0x1000 + 5580


这里,可以用:p/a 0x00002618

 

 

 

查看.app,和.dSYM与崩溃日志是否一致的方法:

输入命令:

dwarfdump ‐‐uuid MyApp.app/MyApp

返回内容:

UUID: E2D9D241‐37D3‐CE06‐7272‐653B813963E2 (armv6) MyApp.app/MyApp

 

输入命令:

dwarfdump ‐‐uuid MyApp.app.dSYM

返回内容

UUID: E2D9D241‐37D3‐CE06‐7272‐653B813963E2 (armv6)MyApp.app.dSYM/Contents/Resources/DWARF/MyApp

 

对比结果是否一致.

 

 

把命令链接到所有用户可以使用

sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash /usr/local/bin/

sudo ln -s  /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin/usr/local/bin/

批量转换日志:(app包和dSYM还有carsh文件都放到对应的目录下了)

cd ~/Desktop/a1201s4z1.5c
pwd
k=1
for i in *.crash;do
        echo $i
        symbolicatecrash $i PABankiPad.app.dSYM > $k.log
        ((k++))
done



iOS crash log 文件解析 iOS crash log 解析 说明:crash log 文件一般是十六进制文件,所以需要我们去解析成我们能够看懂的crash log文件。 第一种解析方式:使用 Symbolicatecrash 解析,步骤如下: 1. 获取 .crash文件,既然都要解析crash log 了,说明你已经拿到crash log 文件了,所以在此不讲解通过何种渠道获取crash log文件 阅读详情

相关推荐

ABAP BAPI_PRODORD_CHANGE函数详解:如何高效重读生产订单主数据

本文深入解析ABAP BAPI_PRODORD_CHANGE函数在生产订单主数据高效处理中的应用。通过详细讲解函数架构、主数据重读机制及实战代码示例,帮助开发人员掌握生产订单数据的精准读取与更新技术,提升SAP系统集成与自动化处理效率。

weixin_29207149的博客 467

iOS crash log 获取及分析

在ios开发过程中,经常会遇到应用在开发过程中或者自己测试时不会有问题。而在安装到别人设备上,或者上传应用商店被别人下载的时候,总是被抱怨程序不定期的crash,真的很令人懊恼! 获取 iOS crash log 这时iOS crash log 派上用场了,程序的大多数crash都会记录在用户的手机中,获取crash log的方法有两种: 1. 用户把设备连接到电脑上,打开xco

FIGHTING的专栏 1590

uniapp 实现RFID识别的实战指南

本文提供了在uniapp中实现RFID识别的完整实战指南。核心在于通过Android系统广播机制,利用uni-app的plus对象调用原生接口,完成与RFID手持设备的“软硬件握手”。文章详细介绍了从环境准备、设备选型、核心代码实现到避坑优化的全流程,帮助开发者快速构建高效的RFID盘点或管理应用。

weixin_29161719的博客 404

IOS Crash Log 分析、归类

在ios开发过程中,经常会遇到应用在开发过程中或者自己测试时不会有问题。而在安装到别人设备上,或者上传应用商店被别人下载的时候,总是被抱怨程序不定期的crash,真的很令人懊恼!   获取 iOS crash log 这时iOS crash log 派上用场了,程序的大多数crash都会记录在用户的手机中,获取crash log的方法有两种: 1. 用户把设备连接到电脑上,打开xcode-

THEWAILKINGDEAD 819

HFSS学习笔记——Vivaldi天线仿真(一)

Vivaldi 天线HFSS仿真,HFSS中指数曲线绘制及曲面绘制。

and_future的博客 1万+

逍遥模拟器改真机参数全指南:从ARM伪装到电池传感器模拟

本文提供逍遥模拟器深度伪装实战指南,重点讲解如何通过修改ARM架构、系统属性和模拟传感器数据,使其在硬件信息、电池状态等维度逼近真实设备,有效规避应用检测。文章详细介绍了使用Magisk模块、LSPosed框架进行设备指纹伪装和动态数据模拟的策略,帮助用户实现从静态信息到动态行为的全方位真机模拟。

weixin_29279101的博客 452

获取 iOS crash log

在ios开发过程中,经常会遇到应用在开发过程中或者自己测试时不会有问题。而在安装到别人设备上,或者上传应用商店被别人下载的时候,总是被抱怨程序不定期的crash,真的很令人懊恼!   获取 iOS crash log 这时iOS crash log 派上用场了,程序的大多数crash都会记录在用户的手机中,获取crash log的方法有两种: 1. 用户把设备连接到电脑上,打开xcode-

Suk的专栏 2万+

深入解析Lora模块的工作原理与应用场景

本文深入解析了Lora模块的工作原理与应用场景。Lora模块作为物联网领域的核心无线通信组件,凭借其独特的扩频调制与半双工通信技术,实现了远距离、低功耗的数据传输。文章详细拆解了其技术内核,包括空中唤醒等低功耗奥秘,并提供了地址、信道、空中速率等关键参数的实战配置指南。最后,探讨了Lora模块在智能家居、智慧农业、城市监测等广域物联网场景中的具体应用,为开发者提供了从理论到实践的完整参考。

weixin_29174385的博客 333

ios Crash Log 分析汇总

ios Crash Log 分析汇总 方法一: 1.xcode 有自带的symbolicatecrash,可以将.crash文件中的16进制地址转换成可读的函数地址。 symbolicatecrash位于: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Dev

redooder的专栏 627

ArcMap安装与配置全攻略:从下载到实战应用

本文提供了ArcMap 10.4.1从系统准备、详细安装到破解激活的完整指南,并包含首次启动的界面介绍与一个实战GIS分析项目。针对初学者,文章强调了在ArcGIS Pro成为趋势的当下,学习经典ArcMap对于理解核心概念和兼容现有工作流仍有重要价值,帮助用户避开安装常见陷阱,快速上手实战应用。

weixin_29200741的博客 338

k8s 查看cpu使用率最高的pod

在 Kubernetes 中,可以使用命令查看 Pod 的资源使用情况,从而找到 CPU 使用率最高的 Pod。

u010674101的专栏 3345

iOS_怎么分析AppStore上面的Crash Log

如果用户的手机同意了发送诊断内容,那么,app崩溃的时候就会把log发送的app store,然后我们就能够下载,分析。 以下是crash log的一部分 Last Exception Backtrace: 0 CoreFoundation 0x30acaf46 exceptionPreprocess + 126 1 libobjc.A.dylib 0x3af0b6aa objc_except

teletian的专栏 4953

SolidWorks速成教程P1——简介及基础操作

SolidWorks教程P1——简介及基础操作

嵌入式阿齐Archie 2万+

测试开发-iOS真机Crash Log 的获取和分析

本文主要介绍iPhone的crash log获取方式和log的符号化处理,通过符号化流程可封装成脚本,稳定测试monkey中可直接对捕获的crash log进行解析

Try My Best! 2322

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iOS_Pass iOS Crash log 解析

http://lieyunye.github.io/blog/2013/09/10/how-to-analyse-iOS-crash-log/ http://blog.youkuaiyun.com/smking/article/details/9342899 [objc] view plain copy   最近在解析umeng错

王学森的专栏 956

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

解析IOS崩溃日志(crash Log)

转自 http://lieyunye.github.io/blog/2013/09/10/how-to-analyse-ios-crash-log/ http://blog.youkuaiyun.com/smking/article/details/9342899 [objc] view plain copy 最近在解析umeng错误分析日志上有了重大突破

zhh152的博客 469

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IOS Crash Log 分析

上架AppStroe 被打回来了,原因是: Your app crashed on iPad running iOS 11.3.1 connected to an IPv6 network when we tapped on profile image.We have attached detailed crash logs to help troubleshoot this iss...

aaaaa13578的博客 1175

ios crash log的解析

关于ios的crash log的解析,自从接触ios以来学到的解析方法,一直是非常传统也非常复杂的,过程基本如下: 首先.app和DSYM,以及crash log三个文件。建议放一个文件夹。 验证三者的UUID是否一致,如果不一致,将无法解析。验证方法如下:2.1查看xx.app文...

chenjiyin7034的博客 260

抓取手机crash log(iOS+Android)

抓取手机crash log(iOS+Android) iOS抓取log 1. Mac电脑 1. 方法一:查看手机端日志(只可看到已发生crash日志,不受电脑的限制) 直接查看手机系统设置->隐私->分析与改进,即可查看发生过crash的日志,通常,崩溃日志格式包含程序包名,时间以及后缀ips或者beta.点击进去,右上角点击分享可以各种方式分享出去(未查到与iOS版本有关) 2. 方法二:使用控制台查看手机端实时日志(需要先连接再测试,才可抓取有效的日志) 1. Mac电脑直接在系统软件里其他

qq_43311363的博客 6042

iOS中crash的log解析

1、symbolicate的使用 find /Applications/Xcode.app -name symbolicatecrash -type f, 找到/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash 将crash ...

静水流深~专栏 516

iOS crash log 分析。

背景 使用Delphi开发的APP,提交到App Store审核,结果被拒,并且反馈一个crashlog文件。这个log文件中包含APP基本信息和十六进制的日志,无从下手。 如何看懂这个日志文件 使用symbolicatecrash工具,这个工具应该是Xcode工具自带的。 根据XCo...

chenliaoxi4883的博客 221

ios crash log查看

查看crash log需要以下要求: 打包时的原文件, 在window下的Organizer下的Archives, 找到崩溃出错的对应版本打包文件, 点右键进入文件夹内找到路径”dSYMs/YourApp.app.dSYM” symbolicatecrash文件从xcode6的对应目录拷贝出来: /Applications/Xcode.app/Contents/Developer/Platform

Zszen John 的 Blog 870

iOS crash log 解析

iOS开发中,经常遇到App在开发及测试时不会有问题,但是装在别人的设备中会出现各种不定时的莫名的 crash,因为iOS设备会保存应用的大部分的 crash Log,所以可以通过 crash Log 来定位 crash 原因。 一. 获取iOS设备上的 crash log 1. 将iOS设备连接到电脑上,打开 Xcode -> Organizer -> Devices,...

weixin_30267697的博客 371
上一篇: iPhone开发技巧之调试篇 — 程序Crash后的调试技巧
下一篇: ios5 支持 json 转化
皓浩
博客等级 码龄18年 157粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值