对于已经上线的应用,苹果测试的应用,或者是release环境包导致的crash,我们就需要一些特殊的手段来通过crash log进行分析定位了。
首先需要release版本的xxx应用的三个文件:xxx.app.dSYM文件、xxx.app文件、xxx.crash文件,确保他们有相同的uuid才能生成才能生证日志文件:
(xxx是工程名)
1.导出xxx.crash
通过Xcode的Organizer查看某台iphone设备的DeviceLog,选择需要的crash log,导出xxx.crash文件。(苹果测试crash会给你这个文件)
2.xxx.app
找到当前iphone设备上安装的ipa文件,更改文件后缀名为zip,解压后得到Payload文件夹,你需要的app文件就在其中了。
3.找到对应build版本的dSYM文件
dSYM文件是iOS编译后保存16进制函数地址映射信息的文件,每次应用程序build后,都会生成对应的xxx.app, xxx.app.dSYM文件。
4.确定dSYM、app以及crash文件的关系
每一个xxx.app, xxx.app.dSYM文件都拥有相应的uuid,crash文件也有uuid,只有三者uuid一至才表明之三者可以解析出正确的日志文件。
查看xxx.app文件的uuid的方法,在terminal中输入命令:
dwarfdump --uuid xxx.app/xxx
查看xxx.app.dSYM文件的uuid的方法,在terminal中输入命令:
dwarfdump --uuid xxx.app.dSYM
而.crash的uuid位于,crash日志中的Binary Images:中的第一行尖括号内。如:
armv7 <8bdeaf1a0b233ac199728c2a0ebb4165>
下面用symbolicatecrash指令生成日志文件
Xcode6.1路径, symbolicatecrash在: Xcode6.0.app ▸ Contents ▸ SharedFrameworks ▸ DTDeviceKitBase.framework ▸ Versions ▸ A ▸ Resources▸ symbolicatecrash (不同版本xcode路径是不同的)
确认文件:
$ ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /usr/bin/symbolicatecrash
设置xcode DEVELOPER_DIR:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
把xxx.app.dSYM文件、xxx.app文件、xxx.crash放在同一路径下执行:
symbolicatecrash xxx.crash xxx.app.dSYM > ~/crash.txt
crash.txt就是和你debug模式所看到一样类型的输出了。
thx:
http://blog.csdn.net/guojin08/article/details/41351813
相关推荐
如何定位Release程序崩溃原因
而“bugly_crash_release.jar_release_bugly_”这一标题所揭示的,正是腾讯Bugly提供的崩溃报告服务的一个关键组件——Bugly Crash Release。这个jar文件是Bugly崩溃收集和分析系统的发布版本,专门用于处理应用运行...
程序在debug可以正常运行,但是在release版后异常结束,系统又没有提供任何信息情况下,或者程序发布后在客户手中出现异常崩溃,但自己测试又不能复现问题,要是能捕获到异常时相关信息就很好定位问题了。...
本示例代码涉及的是如何在Release版本中处理崩溃,并使用Visual Studio(VS2017)进行调试,通过dump文件来定位代码出错的行数。这是一项关键技能,因为Release版本通常用于最终用户,而且调试信息较少,所以当出现...
《Bugly Crash Release 源码解析》 在软件开发过程中,Bugly 是一款非常知名的错误分析工具,尤其在Android应用开发中,它为开发者提供了强大的崩溃报告和性能监控功能。"bugly_crash_release.jar_release_bugly_...
在给定的文件信息中,我们看到涉及了几个与Bugly相关的文件,分别是"bugly_jar"、"bugly_agent.jar"、"bugly_crash_release.jar"以及"libBugly.so"。这些文件在Android应用开发中扮演着关键的角色,下面将详细解释...
在处理Release版本的程序崩溃问题时,WinDbg能够帮助我们定位到出错的函数和源代码行。通常,Release版本的程序不会像Debug版本那样提供丰富的调试信息,但通过分析崩溃时产生的dmp文件(内存转储文件),我们可以...
当我们软件release模式打包或上线后,不会像我们在Xcode中那样直观的看到崩溃的错误。这时我们就需要分析崩溃日志,iOS设备中会有日志文件保存我们每个应用出错的函数内存地址。通过Xcode的Devices/Organizer可以将...
本篇文章将深入探讨“Qt Release崩溃测试demo”的相关知识点,以及如何利用这个测试来定位和解决bug。 首先,让我们理解“Qt Release”版本。在Qt开发中,通常有Debug和Release两种构建模式。Debug模式包含了大量的...
IMQA-Crash-Release 是一个针对iOS平台的软件发布版本,主要关注的是应用程序稳定性,尤其是针对即时消息(IM)功能的错误管理和性能优化。在iOS应用开发中,Objective-C是一种常用的编程语言,因此我们可以推测这个...
这不仅有助于开发者在发生错误时快速定位问题,还能提供有价值的设备信息和用户环境数据,从而提升应用的稳定性和用户体验。同时,结合服务器端的日志分析系统,可以实现远程监控和统计,为持续优化应用提供有力支持...
文档“crash_20221012【文档翻译_译文_英译中】.pdf”似乎是一份关于软件崩溃分析的报告,其中包含了大量的设备信息、软件版本和错误日志。以下是根据提供的内容提取的关键知识点: 1. **设备信息**:设备型号为ARE...
如"vmrunuifjdt05uqunullvtrvjoqu1fiezst00gu05trvHUS5gtzmgv0hfukugvvnfuk5btuugpsa/ieforagmt0oybsyxn0vgltzt...",很可能代表堆栈跟踪信息,它们记录了程序执行时的方法调用顺序,用于定位代码中出错的位置。...
- 使用命令`uname -a`或`cat /etc/os-release`来查看openEuler的版本信息。 - **系统硬件信息**: - 可以通过命令`lspci`来获取系统的PCI设备信息,进一步使用`lspci -s xx:yy.z -vvv`获取特定设备的详细信息。 - ...
Coredump文件包含了程序崩溃时内存中的关键信息,如进程的内存映射、全局变量、堆栈信息等,使得开发者能够定位到问题的具体位置,进而修复错误。本篇将详细介绍如何在C++代码中实现Windows系统的Coredump文件生成。...
这不仅可以帮助你快速定位并修复问题,还能提供更好的用户体验,避免因应用突然崩溃而让用户感到困扰。在实际开发中,你还可以根据需求扩展这个框架,比如添加用户反馈功能,或者在崩溃时显示友好的错误提示页面。
- 在出现问题时捕获堆栈信息,分析具体的失败位置。 - 对于C/C++代码,使用 `AddressSanitizer` 或 `Valgrind` 工具检测内存错误。 #### Oops问题的调试和定位 - **定义**:当Android系统底层(如Linux内核)出现...
3. **查看堆栈信息**:输入命令`.ecxr`查看崩溃时的上下文信息,再输入`k`命令查看堆栈回溯,这有助于定位崩溃位置。 4. **检查变量值**:使用`dv`或`dv /v`命令查看局部变量和表达式的值,帮助理解崩溃原因。 5. **...
当程序由于未捕获的异常而崩溃时,通常会丢失当前的堆栈信息,这使得定位问题变得困难。为了解决这个问题,我们可以编写一个全局的异常处理器,该处理器在异常发生时捕获异常,并在控制台上打印详细的堆栈跟踪信息。...
private static final String FILE_NAME = "crash"; private static final String FILE_NAME_SUFFIX = ".txt"; private String phoneInfo; private static CrashHandler instance = new CrashHandler(); ...