三九宝宝网宝宝教育学龄段教育

ios开发怎么分析crash日志

02月25日 编辑 39baobao.com

[如何分析iis日志]虽然Log Parser支持将解析的IIS日志以表格形式供人阅读,但是有时候我们需要再做一些细致分析时,可能会按不同的方式进行【多次】查询, 对于这种需求,如果每次查询都直接运行Log...+阅读

二、解析crash logs经网上搜索解析crash logs的三种,由于未经测试,所以没有记录下,详见可以:经测试可用的方法为atos -o XXX.app.dSYM/Contents/Resources/DWARF/XXX -l address0 targetAddress其中:a、XXX是appnameb、address0是当前进程在内存中加载的起始地址,至于为什么需要这个,那就有必要去了解下ASLR获取地址参下图:binary Images后面第一个即为基地址(内存中加载的起始地址)c、targetAddress就是你想要符号化的地址 ,此处一般选取如下 3 appName 0x000f462a 0x4000 + 984618 4 appName 0x00352aee 0x4000 + 3468014以appName开头的地址二、常见的Crash类型

1、Watchdog timeoutException Code:0x8badf00d, 不太直观,可以读成“eat bad food”,意思是don't block main thread紧接着下面会有一段描述:Application Specific Information:com.xxx.yyy failed to resume in time对于此类Crash,我们应该去审视自己App初始化时做的事情是否正确,是否在主线程请求了网络,或者其他耗时的事情卡住了正常初始化流程。通常系统允许一个App从启动到可以相应用户事件的时间最多为5S,如果超过了5S,App就会被系统终止掉。在Launch,resume,suspend,quit时都会有相应的时间要求。在Highlight Thread里面我们可以看到被终止时调用到的位置,xxxAppDelegate加上行号。 PS. 在连接Xcode调试时为了便于调试,系统会暂时禁用掉Watchdog,所以此类问题的发现需要使用正常的启动模式。

2、User force-quitException Codes: 0xdeadfa11, deadfall这个强制退出跟我们平时所说的kill掉后台任务操作还不太一样,通常在程序bug造成系统无法响应时可以采用长按电源键,当屏幕出现关机确认画面时按下Home键即可关闭当前程序。

3、Low Memory termination跟一般的Crash结构不太一样,通常有Free pages,Wired Pages,Purgeable pages,largest process 组成,同事会列出当前时刻系统运行所有进程的信息。关于Memory warning可以参看我之前写的一篇文章IOS 内存警告 Memory warning level。App在运行过程中,系统内存紧张时通常会先发警告,同时把后台挂起的程序终止掉,最终如果还是内存不够的话就会终止掉当前前台的进程。当接受到内存警告的事后,我们应该释放尽可能多的内存,Crash其实也可以看做是对App的一种保护62616964757a686964616fe4b893e5b19e31333361323037。

4、Crash due to bugs因为程序bug导致的Crash通常千奇百怪,很难一概而论。大部分情况通过Crash日志就可以定位出问题,当然也不排除部分疑难杂症看半天都不值问题出在哪儿。这个就只能看功底了,一点点找,总是能发现蛛丝马迹。是在看不出来时还可以求助于Google大神,总有人遇到和你一样的Bug 三、常见的Exception Type & Exception Code

1、Exception Type1)EXC_BAD_ACCESS此类型的Excpetion是我们最长碰到的Crash,通常用于访问了不改访问的内存导致。一般EXC_BAD_ACCESS后面的"()"还会带有补充信息。SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。SIGABRT: 收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。SEGV:(Segmentation Violation),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;SIGBUS:总线错误,与 SIGSEGV 不同的是,SIGSEGV 访问的是无效地址,而 SIGBUS 访问的是有效地址,但总线访问异常(如地址对齐问题)SIGILL:尝试执行非法的指令,可能不被识别或者没有权限2)EXC_BAD_INSTRUCTION此类异常通常由于线程执行非法指令导致3)EXC_ARITHMETIC除零错误会抛出此类异常

怎样用代码获取 crash相关信息

提供一段代码,能捕获大部分crash消息,不过有些还是没办法:先将console中的crash信息写入文本,再在下次启动程序时,调用借口将crash信息传回服务器。实例代码如下:- (void)redirectTNLogToDocumentFolder{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *fileName ="TaoLan.log"; NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName]; NSString *contents = [[NSString alloc] initWithContentsOfFile:logFilePath encoding:NSUTF8StringEncoding error:nil]; NSRange range1 = [contents rangeOfString:"Terminating app due to uncaught exception"]; NSRange range2 = [contents rangeOfString:"message sent to deallocated instance"]; if (range1.length >0 || range2.length >0) { NSString *contents1 = [contents stringByReplacingOccurrencesOfString:[NSString stringWithFormat:"%c",'\n'] withString:"

"]; if (contents1 & [contents1 length] >10) { NSString * bundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:"CFBundleVersion"]; NSString * displayName = [[[NSBundle mainBundle] infoDictionary] objectForKey:"CFBundleDisplayName"]; NSString *contents2 = [[NSString alloc] initWithFormat:"BUG监听报告:

手机型号: % , 版本: %

程序名称: %, 版本:%

用户: %d

%", [[UIDevice currentDevice] systemName], [[UIDevice currentDevice] systemVersion], displayName, bundleVersion, taonanApi.currentUserId, contents1]; [taonanApi updatelog:contents2]; [contents2 release]; } } [contents release]; freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"w",stderr);}

如何分析linux crash

如前文所述,当 linux 系统内核发生崩溃的时候,可以通过 kdump 等方式收集内核崩溃之前的内存,生成一个转储文件 vmcore。内核开发者通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码改进。那么 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。使用 crash 的先决条件由于 crash 用于调试内核崩溃的转储文件,因此使用 crash 需要依赖如下条件:1. kernel 映像文件 vmlinux 在编译的时候必须指定了 -g 参数,即带有调试信息。2. 需要有一个内存崩溃转储文件(例如 vmcore),或者可以通过 /dev/mem 或 /dev/crash 访问的实时系统内存。如果 crash 命令行没有指定转储文件,则 crash 默认使用实时系统内存,这时需要 root 权限。

3. crash 支持的平台处理器包括:x86, x86_64, ia64, ppc64, arm, s390, s390x ( 也有部分 crash 版本支持 Alpha 和 32-bit PowerPC,但是对于这两种平台的支持不保证长期维护 )。4. crash 支持 2.2.5-15(含)以后的 Linux 内核版本。随着 Linux 内核的更新,crash 也在不断升级以适应新的内核。crash 安装指南要想使用 crash 调试内核转储文件,需要安装 crash 工具和内核调试信息包。不同的发行版安装包名称略有差异,这里仅列出 RHEL 和 SLES 发行版对应的安装包名称如下:表 1. crash 工具和内核调试包系统版本crash 工具名称内核调试信息包RHEL6.2crashkernel-debuginfo-commonkernel-debuginfoSLES11SP2crashkernel-default-debuginfokernel-ppc64-debuginfo以 RHEL 为例,安装 crash 及内核调试信息包的步骤如下:rpm -ivh crash-5.1.8-1.el6.ppc64.rpmrpm -ivh kernel-debuginfo-common-ppc64-2.6.32-220.el6.ppc64.rpmrpm -ivh kernel-debuginfo-2.6.32-220.el6.ppc64.rpm启动 crash启动参数说明使用 crash 调试转储文件,需要在命令行输入两个参数:debug kernel 和 dump file,其中 dump file 是内核转储文件的名称,debug kernel 是由内核调试信息包安装的,不同的发行版名称略有不同,以 RHEL 和 SLES 为例:RHEL6.2:/usr/lib/debug/lib/modules/2.6.32-220.el6.ppc64/vmlinuxSLES11SP2:/usr/lib/debug/boot/vmlinux-3.0.13-0.27-ppc64.debug使用 crash -h 或 man crash 可以查看 crash 支持的一系列选项,这里仅以常用的选项为例说明如下:-h:打印帮助信息-d:设置调试级别-S:使用 /boot/System.map 作为默认的映射文件-s:不显示版本、初始调试信息等,直接进入命令行-i file:启动之后自动运行 file 中的命令,再接受用户输入

以下为关联文档:

android混淆后错误日志怎么分析第一步: 找到混淆的mapping.txt文件 build ->outputs ->mapping ->release ->mapping.txt 或者:1项目目录的progurad下有一个mapping.txt文件 这是混淆后的名字 和原名字的映...

如何分析Linux日志Linux系统下Nginx 日志可以查看系统运行记录和出错说明,对Nginx 日志的分析可以了解系统运行的状态。那么Linux系统Nginx日志怎么分析呢? Nginx 日志相关配置有 2 个地方:acces...

如何设置iis日志和分析iis日志首选如何设置iis日志:(仅适用于服务器 ,虚拟主机需要让空间商给设置)1.打开Internet 信息服务 在指定站点上点击鼠标右键,选择“属性”。在网站“属性”窗口, “网站”标签中在“...

日志文件分析技巧检查日期和时间 Web页面访问会留下详细时间,它是由服务器生成的而非客户端时间,不能随意更改,因而可根据时间高低频度为站点生成相应报告。 跟踪客户端IP地址 这对地理信息查询...

请教关于IOS开发的软硬件环境需求1. 低级方案(当待研发产品涉及音视频等涉及声卡、显卡的功能时,不推荐使用): 硬件:主流配置PC机(装黑苹果,大多数主流硬件的驱动都能找到,但还是推荐虚拟) 软件:虚拟机VM + Mac OS 系...

如何使用光年日志分析工具光年分析日志是著名的SEO专家发明的,可以有效的分析网站的访问日志,为网站运维提供可靠的数据,确保网站朝正确的方向发展。这里,就来说下如何使用光年日志分析工具。 工具/原料...

爱站seo工具包之日志分析工具怎么用1、此工具支持直接拖拽日志文件(一个或者多个)至窗口进行分析,可自动识别IIS、Apache、Nginx日志格式。 2、蜘蛛分析 包括概要分析,即所有不同的蜘蛛的访问次数、停留时间、总抓...

如何对windows系统日志分析您好,很高兴为您解答。 一、Windows日志文件的保护 日志文件对我们如此重要,因此不能忽视对它的保护,防止发生某些“不法之徒”将日志文件清洗一空的情况。 1. 修改日志文件存...

怎么分析windows应用日志查看 Windows 应用程序日志 在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”。 在事件查看器中,单击“应用程序”。 SQL Server 事件由“资源”...

推荐阅读
图文推荐