精华内容
下载资源
问答
  • 如何用程序获取Crash日志 并 可以上传Crash日志,查看解析和定位。
  • 在ios开发过程,当应用已经打包,iPhone设备通过ipa的包安装应用后,在使用过程发现crash,那么如何获取crash日志呢,现提供如下四种获取crash日志的方式:1、打开iPhone设备的设置里面的隐私中的“诊断与用量”,...

    在ios开发过程,当应用已经打包,iPhone设备通过ipa的包安装应用后,在使用过程发现crash,那么如何获取crash日志呢,现提供如下四种获取crash日志的方式:

    1、打开iPhone设备的设置里面的隐私中的“诊断与用量”,然后如果app崩溃了,设备会弹出提示框,用户确认之后,crash log会自动发送到苹果后台,然后用开发者账号登陆上去,可以拿到crash log。

    2、将设备链接到mac或者windows上,同步到iTunes后再从电脑的目录下获取crash log:

    Mac OS X:~/Library/Logs/CrashReporter/MobileDevice

    Windows XP:C:\Documents and Settings\Application Data\Apple computer\Logs\CrashReporter

    Windows 7/Vista:C:\Users\计算机登录名\AppData\Roaming\Apple Computer\Logs\CrashReporter\MobileDevice

    3、可以通过itools工具获取crash log,打开itools,连接iPhone设备,按照下图提示,获取crash log

    4、通过xcode获取crash log,打开xcode,连接iPhone设备,打开window下的device,可以看到你连接的设备,可以看到如下界面,点击view device logs,可以看到所有的日志,选中日志,点击右键可以到处日志

    二、解析crash logs

    经测试可用的方法为atos -o XXX.app.dSYM/Contents/Resources/DWARF/XXX -l address0 targetAddress

    其中:

    a、XXX是appname

    b、address0是当前进程在内存中加载的起始地址,至于为什么需要这个,那就有必要去了解下ASLR

    获取地址参考下图:

    c、targetAddress就是你想要符号化的地址

    原文:http://my.oschina.net/u/1432769/blog/387562

    展开全文
  • 在项目真机运行中, 可能会出现我们意想不到的crash,在我们找不到原因的时候,可以通过Xcode将crash文件...3.获取所有的crash日志文件 4. 右键可以Export,就可以查看相关的crash的原因 下节:如何分析crash文件

    在项目真机运行中, 可能会出现我们意想不到的crash,在我们找不到原因的时候,可以通过Xcode将crash文件导出来,来进行进一步分析

    1.连接真机

    2.找到Xcode --> Window --> Devices

    \

     

    3.获取所有的crash日志文件

    \

    4. 右键可以Export,就可以查看相关的crash的原因

    下节:如何分析crash文件

    展开全文
  • 调试也无法查看错误异常的时候,可以查看手机生成crash日志。 1.iTunes同步获取 手机连接上电脑,打开iTunes软件来同步手机或移动设备,这时候同步的Crash日志就会同步到电脑上。 2.打开Finder,前往以下路径...

    如果使用应用的时候,出现闪退现象。调试也无法查看错误异常的时候,可以查看手机生成crash日志。

    1.iTunes同步获取

    手机连接上电脑,打开iTunes软件来同步手机或移动设备,这时候同步的Crash日志就会同步到电脑上。

    2.打开Finder,前往以下路径:(Mac OS X)~/Library/Logs/CrashReporter/MobileDevice,即可查看相应crash日志。

    展开全文
  • 首先我们整理经常会闪退的异常哪些:数组越界、空引用、引用未定义方法、内存空间不足等等。...1.如何获取crash闪退日志(工具和程序两种方法); 2.解析crash; 说明:这里说的crash日志不是在联调的情...

     首先我们整理经常会闪退的异常哪些:数组越界、空引用、引用未定义方法、内存空间不足等等。

       友盟分享后台是可以看到crash的日志,如下图:

       

            开始研究的时候,我有两个疑问:

            1.如何获取crash闪退日志(工具和程序两种方法);

            2.解析crash;

           

            说明:这里说的crash日志不是在联调的情况下(是生产环境,通俗的说就是发布了的产品)。

     

            如何获取crash闪退日志 -- 工具查看

            先看第一个问题如何查看,我搜索的方法有以下几个:

            第一个方法:XCode  的菜单Window->Organizer    选择Devices  ->  选中的手机 -> 点击手机名称左边的箭头 会等到如下图

            

           在右边竖蓝色矩形框中 Type里面出现两种类型:Unknown和Crash 这两种类型分别是 内存不够回收内存kill应用程序导致Crash和程序异常Crash的日志。

     

           上图是我在刚打开日志(立马、马上)截的图,否则过了5秒中,会变成这样(自动解析):

           

          注意对比一下红色框框内容,这个日志也基本上上告诉你crash的原因了。

          

           第二种方法 打开手机 - > 设置 -> 通用 - > 关于本机 - > 诊断与用量 - > 诊断与用量数据  这里面就是所有应用的Crash日志。

           第三种方法 通过iTunes Connect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志。方法很多这里不多列了。

     

          解析crash

          参见:http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports )

           

          用程序获取crash日志

          但是这里都是工具,没有用到程序获取,经过千方百计的查询(思路是:先找到存放crash的iphone系统路径:var/mobile/Library/Logs/CrashReporter)找到了crash存放的路径,唉,苦于无法读取(用程序读出来都是nil),当然如果是越狱手机就不一样是可以读取的。这个思路断掉了。

     

           换个思路:自己用程序捕获crash,保存到本地可以吗?这么一试,果然........

           第一步:新建一个继承自NSObject的类(Xcode新建一个空项目过程略),取名字CatchCrash,在h和m文件中写下:

           .h文件

            

    1. #import <Foundation/Foundation.h>  
    2.   
    3. @interface CatchCrash : NSObject  
    4.   
    5. void uncaughtExceptionHandler(NSException *exception);  
    6.   
    7. @end  


           .m(m)文件

     

     

    1. #import "CatchCrash.h"  
    2.   
    3. @implementation CatchCrash  
    4.   
    5. void uncaughtExceptionHandler(NSException *exception)  
    6. {  
    7.     // 异常的堆栈信息  
    8.     NSArray *stackArray = [exception callStackSymbols];  
    9.     // 出现异常的原因  
    10.     NSString *reason = [exception reason];  
    11.     // 异常名称  
    12.     NSString *name = [exception name];  
    13.     NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];  
    14.     NSLog(@"%@", exceptionInfo);  
    15.       
    16.     NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray];  
    17.     [tmpArr insertObject:reason atIndex:0];  
    18.       
    19.     //保存到本地  --  当然你可以在下次启动的时候,上传这个log  
    20.     [exceptionInfo writeToFile:[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]  atomically:YES encoding:NSUTF8StringEncoding error:nil];  
    21. }  
    22.   
    23. @end  


           第二步:添加一个继承自UIViewcontroller的类,取名字为TestViewController。

     

           第三步:注册CatchCrash异常处理方法,在Appdelegate写下如下代码:

     

    1. #import "AppDelegate.h"  
    2. #import "CatchCrash.h"  
    3. #import "TestViewController.h"  
    4.   
    5. @implementation AppDelegate  
    6.   
    7. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
    8. {  
    9.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
    10.     // Override point for customization after application launch.  
    11.   
    12.     //注册消息处理函数的处理方法  
    13.     NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);  
    14.       
    15.     TestViewController *testVc = [[TestViewController alloc] init];  
    16.     self.window.rootViewController = testVc;  
    17.       
    18.     self.window.backgroundColor = [UIColor whiteColor];  
    19.     [self.window makeKeyAndVisible];  
    20.     return YES;  
    21. }  
    22.   
    23. - (void)applicationWillResignActive:(UIApplication *)application  
    24. {}  
    25.   
    26. - (void)applicationDidEnterBackground:(UIApplication *)application  
    27. {}  
    28.   
    29. - (void)applicationWillEnterForeground:(UIApplication *)application  
    30. {}  
    31.   
    32. - (void)applicationDidBecomeActive:(UIApplication *)application  
    33. {}  
    34.   
    35. - (void)applicationWillTerminate:(UIApplication *)application  
    36. {}  


           第四部:在TestViewController的Xib上面添加一个按钮并给其添加一个单击事件,TestViewController.m文件中有如下代码:

    1. #import "TestViewController.h"  
    2.   
    3. @interface TestViewController ()  
    4.   
    5. @end  
    6.   
    7. @implementation TestViewController  
    8.   
    9. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
    10. {  
    11.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
    12.     if (self) {  
    13.         // Custom initialization  
    14.     }  
    15.     return self;  
    16. }  
    17.   
    18. - (void)viewDidLoad  
    19. {  
    20.     [super viewDidLoad];  
    21.     // Do any additional setup after loading the view from its nib.  
    22. }  
    23.   
    24. - (void)didReceiveMemoryWarning  
    25. {  
    26.     [super didReceiveMemoryWarning];  
    27.     // Dispose of any resources that can be recreated.  
    28. }  
    29.   
    30. #pragma mark - 单击事件  
    31. - (IBAction)crashTapped:(id)sender  
    32. {  
    33.     //常见异常1---不存在方法引用  
    34. //    [self performSelector:@selector(thisMthodDoesNotExist) withObject:nil];  
    35.       
    36.     //常见异常2---键值对引用nil  
    37. //    [[NSMutableDictionary dictionary] setObject:nil forKey:@"nil"];  
    38.       
    39.     //常见异常3---数组越界  
    40.     [[NSArray array] objectAtIndex:1];  
    41.       
    42.     //常见异常4---memory warning 级别3以上  
    43. //    [self performSelector:@selector(killMemory) withObject:nil];  
    44.       
    45.     //其他大家去想吧  
    46. }  
    47.   
    48. #pragma mark - custom method  
    49. - (void) killMemory  
    50. {  
    51.     for (int i = 0; i 300; i ++)  
    52.     {  
    53.         UILabel *tmpLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];  
    54.         tmpLabel.layer.masksToBounds = YES;  
    55.         tmpLabel.layer.cornerRadius = 10;  
    56.         tmpLabel.backgroundColor = [UIColor redColor];  
    57.         [self.view addSubview:tmpLabel];  
    58.     }  
    59. }  
    60.   
    61. @end  

     

     

             运行代码:可以看到闪退,我们用iExplorer打开:

             

            导出error日志,我们可以看到:

     

    1. Exception reason:NSRangeException  
    2. <span style="color:#FF0000;">Exception name:*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds for empty array</span>  
    3. Exception stack:(  
    4.     0   CoreFoundation                      0x2f2edfeb <redacted> + 154  
    5.     1   libobjc.A.dylib                     0x39b66ccf objc_exception_throw + 38  
    6.     2   CoreFoundation                      0x2f224a89 <redacted> + 176  
    7. <span style="color:#FF0000;"> 3   TestCrash                           0x000e8077 -[TestViewController crashTapped:] + 126</span>  
    8.     4   UIKit                               0x31b3f057 <redacted> + 90  
    9.     5   UIKit                               0x31b3eff7 <redacted> + 30  
    10.     6   UIKit                               0x31b3efd1 <redacted> + 44  
    11.     7   UIKit                               0x31b2a737 <redacted> + 374  
    12.     8   UIKit                               0x31b3ea4f <redacted> + 590  
    13.     9   UIKit                               0x31b3e721 <redacted> + 528  
    14.     10  UIKit                               0x31b396eb <redacted> + 758  
    15.     11  UIKit                               0x31b0e8ed <redacted> + 196  
    16.     12  UIKit                               0x31b0cf97 <redacted> + 7102  
    17.     13  CoreFoundation                      0x2f2b925b <redacted> + 14  
    18.     14  CoreFoundation                      0x2f2b872b <redacted> + 206  
    19.     15  CoreFoundation                      0x2f2b6f1f <redacted> + 622  
    20.     16  CoreFoundation                      0x2f221f0f CFRunLoopRunSpecific + 522  
    21.     17  CoreFoundation                      0x2f221cf3 CFRunLoopRunInMode + 106  
    22.     18  GraphicsServices                    0x3417a663 GSEventRunModal + 138  
    23.     19  UIKit                               0x31b6d16d UIApplicationMain + 1136  
    24.     20  TestCrash                           0x000e810d main + 116  
    25.     21  libdyld.dylib                       0x3a073ab7 <redacted> + 2  
    26. )  

     

    太清楚了,对吧,下次启动应用程序的时候可以把这个error.log(这个名字我临时写的,用什么日期也可以的)上传。可以在日志中加上类似与友盟的  iphone 的UUID、Bundle ID 等等。

     

    现在猜测一下,友盟是不是这么做的呢?

    进入一个引用友盟sdk项目的根目录,打开mac终端输入命令 grep -r   NSSetUncaughtExceptionHandler .(这个点不能少或者绝对路径替换这个点),得到如下图:

     

    真的就找到了,什么什么  matches。当然这只是猜测。

     

    转自:http://blog.csdn.net/folish_audi/article/details/36001629

    转载于:https://www.cnblogs.com/mumoozhu/p/4514534.html

    展开全文
  • Android Crash日志收集

    2017-07-01 11:36:12
    这里主要针对手机发货后,到达用户手上之后,如何搜集故障现场信息。...要实现一个Crash SDK包括三个方面:Crash捕获、Crash堆栈信息的获取Crash日志的上报。 Java层Crash捕获机制 1)基本原理 Android应用
  • 若一个App没有加入Crashlytics或者Buggly这些崩溃日志监控,那么我们在App崩溃的...一、获取crash日志文件  1.手机直接获取日志   在手机 设置->隐私->分析->数据分析 中找到对应App(文件名为App设...
  • iOS/OSX Crash:崩溃日志报告iOS/OSX Crash:异常类型iOS/OSX Crash:捕捉异常iOS Crash:函数调用栈OSX Crash:为什么抛出异常时应用不崩溃1 如何获取Crash日志[1]Crash日志的来源一般有两个渠道:1.1 苹果收集的...
  • 正好最近也在研究这方面东东,所以整理一下分享给大家:如何用程序获取Crash日志 并 可以上传Crash日志。 首先我们整理经常会闪退的异常哪些:数组越界、空引用、引用未定义方法、内存空间不足等等。 友盟分享...
  •  正好最近也在研究这方面东东,所以整理一下分享给大家:如何用程序获取Crash日志 并 可以上传Crash日志。  首先我们整理经常会闪退的异常哪些:数组越界、空引用、引用未定义方法、内存空间不足等等。 ...
  • 如何获取crash日志?  当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上。这份crash日志记录着应用程序崩溃时的信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例外),对于开发人员定位...
  •  如何获取crash闪退日志 -- 工具查看  先看第一个问题如何查看,我搜索的方法有以下几个:  第一个方法:XCode 的菜单Window->Organizer 选择Devices -> 选中的手机 -> 点击手机名称左边的箭头 会等到如...
  • Crash日志解析

    2018-11-03 10:30:51
    本文档包含有关如何表示,理解和解释崩溃报告的基本信息。 1、介绍 2、获取崩溃和低内存报告 3、象征性的奔溃报告 1、位码(bitCode) 2、确定奔溃报告是否符号化 3、用Xcode标记iOS奔溃报告 4、用atos表示崩溃...
  • 符号化Crash日志

    2018-12-03 19:21:59
    如何获取dSYM 1、获取开发中的dSYM 修改配置文件如下图: 编译项目–&gt; 找到项目中Products下xx.app --&gt;show in Finder,可以看到xx.app.dSYM文件; 2、获取App Store已经发布的...
  • ‍‍点击关注“有赞coder”获取更多技术干货哦~作者:杨杨 &姜豪部门:电商移动背景有赞在基础保障平台的实践中完成了 Crash平台 的建设,但是iOS的...一、crash日志的收集与分析1.1 如何收集crash日志1.手机上...
  • andorid Crash日志捕获

    2014-08-24 19:47:19
    开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信息,并发送这些信息到服务器供开
  • http://www.cnblogs.com/smileEvday/p/Crash1.htmlhttp://blog.csdn.net/ys410900345/article/details/26756589如何获取 symbolicatecrash 在什么位置xocde编译app的时候会同时生成一个以dsym作为后缀的文件,这个...
  • iOS crash崩溃日志总结

    2020-06-08 16:27:24
    引言 当游戏运行崩溃(也叫闪退)时,iOS系统生成对应的*.crash崩溃日志并保存在设备上。这份崩溃日志通常包含游戏闪退时当时运行的每个线程的堆栈调用信息,我们通过分析这些信息,定位游戏...一、如何获取崩溃日志
  • 在iOS开发过程,当应用已经打包,iPhone设备通过ipa的包安装应用后,在使用过程发现crash,那么如何获取crash日志呢,现提供如下四种获取crash日志的方式: 1、打开iPhone设备的设置里面的隐私中的“诊断与用量”,...
  • 我们常常会遇到iPhone手机或者iPad平板上运行APP崩溃的问题,有时候...那么如何获取到iOS设备崩溃日志呢?这个提供一些简单的方法,共开发者与用户沟通使用。 1、iTunes同步获取 大部分用户可能都会使用iTunes软
  • 上一篇介绍到使用友盟统计分析,结合日志信息和.xcarchive文件和.dSYM工具快速定位crash位置。但如果项目中没有集成友盟统计分析或者其他第三方统计分析,我们便可以在项目中自己做一个日志的类,通过try catch把...
  • 1、Mysql逻辑架构图场景一:一条SQL语句如何执行?如图显示一条SQL语句的执行过程: 执行器的执行流程: 2、Mysql日志系统说到日志系统,需要了解几个概念:creash-safe、redo log、binlog、WAL技术。Redo log用于...

空空如也

空空如也

1 2 3 4
收藏数 70
精华内容 28
关键字:

如何获取crash日志