IOS上objective-c开发调试方法

常用总结,陆续补充,免得忘记。

1.如果问题是可以复现的,用Breakpoint可以跟踪出错位置在进行分析

2.如果使用Breakpoint无法查出crash问题,问题无法复现,可以用profile记录运行过程中的内存,cpu使用,看是否在某一功能突然升高,不稳定。

3.可以通过将所有的NSLOG控制台输出截获到文件输出,在真机上运行来排查在模拟器上无法复现的问题。

在AppDelegate.m下增加方法

- (void) redirectConsoleLogToDocumentFolder {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"NSLog2file.txt"];

    freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);

}

在程序applicationDidFinishLaunching下增加[selfredirectConsoleLogToDocumentFolder];调用。

查看log方法是将手机插入MAC,在xcode的Organize的devices下选择手机的application,可以在目录下找到文件。

4.在手机连入MAC后还可以在devices下看到 Device Logs,里面有所有的crash log,是系统记录的用于排查问题。

5.如果在模拟器遇到crash,实在无法解决,可以使用NSZombie来排查,看堆栈信息。 设置方法是在Xcode的product下的edit scheme中环境变量增加NSZombieEnabled YES, MallocStackLogging YES, MallocStackLoggingNoCompact YES

这样出问题时,可以在gdb下对crash的程序输入 info malloc-history 错误地址(比如:0x836fff0)或者shell pid序号 malloc_history

第一项可监控deallocated的内存,给更多的错误讯息

第二项可开启MallocStack,就知道内存在程式运行中被配置的历史

第三项可以更清楚显示指定的MallocStack状况

阅读全文
类别: 移动  查看评论

你可能感兴趣的:(移动)