iOS崩溃日志crash logs追踪以及调试方法
#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 。
在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 。