iOS崩溃日记crash logs追踪以及调试方法

iOS崩溃日志crash logs追踪以及调试方法

         在IOS程序开发和以及在真机运行程序时,经常会遇到程序crash的情况,从哪里可以获得crash的日志文件,以便更好的分析程序崩溃的原因,让应用更加完美。

         在真机运行程序出现crash状况时,机器会自动产生log文件,它包含了在程序crash之前正在做什么的信息。在pc上对手机或者ipad设备进行同步,就可以将这些日志文件存储在电脑中。下面时如何找到这些日志文件:
1.同步你的移动设备;
2.浏览下面的文件夹,这里假设在iTunes中你的设备显示名称为DEVICE_NAME。那么日志文件的路径为:
Mac OS X : ~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME>
Windows XP: C:\Documents and Settings\\Application Data\Apple computer\Logs\CrashReporter\\

Windows Vista: C:\Users\\AppData\Roaming\Apple computer\Logs\CrashReporter\MobileDevice\\

3.每个日志文件都是以应用的名称开头。你可以将日志文件打包给开发者,以便开发者及时改进程序。

如何debug程序参见iphone参考文档Debugging Deployed iOS Apps。

             而在开发程序过程也会出现程序crash的情况,那么这时生成的文件目录为:

~/Library/Logs/DiagnosticReports/

在该目录下有以.crash扩展名后缀的文件。

除了上面在出现崩溃后的查找crash的原因,而在程序编写调试的过程经常用到的调试手法为NSLog方法,打印出出错信息。但是,在iPhone 应用发布后,程序运行过程中尽量不要有调试 log 信息输出,因为这样会影响程序运行的效率。因此可以通过宏定义设置,使程序只在 debug 模式下输出对我们有用的信息, release 时不会输出。 具体步骤如下:

1、首先建立一个宏定义文件,文件内容如下: 
#if DEBUG 
#define debuglog(format, ...)   NSLog(format, __VA_ARGS__) 
#else 
#define debuglog(format, ...) 
#endif 
2,打开project-->Build setting选项,在下面找LLVM GCC4.2-preprocessing下面的-preprocessor macros  下一级 Debug中设置DEBUG=1 。

这样我们就可以做到log调试信息在release时不会输出,更好的提高应用性能。


如何编写高质量的代码可以参见Ensuring High Quality and Optimal Performance 。