美文网首页
Xcode 调试(一)

Xcode 调试(一)

作者: comst | 来源:发表于2016-03-23 21:06 被阅读77次

    Xcode 调试(一)

    工欲善其事,必先利其器 。对于软件开发而言,调试是必须学会的技能,重要性不言而喻。今天总结一下自己在iOS开发中使用的调试技巧。

    普通断点

    断点是调试中必备的技巧。当程序运行到断点处时会暂停执行,这个时候可也去查看程序当前的某些变量的值。只要在代码旁边点击,就能添加一个断点,再次点击,就能让断点不可用,拖动断点一段距离可以删除断点。在某行创建断点的是 command + \,如图


    还可以为断点添加动作,让断点在暂停的时候执行一些操作,不如输出日志,播放一段声音等。
    异常断点

    iOS开发过程中,如果我们因为异常然后程序崩了,这个时候断点会跑到main函数中去。如果设置了异常断点,当程序异常退出的时候回停在引起异常的代码处。


    符号断点

    符号断点的创建也同异常断点。 一一般符号断点可以在你指定的[reciever message]时中断执行。

    LLDB命令,最常用的打印命令 po
    NSLog打印

    NSLog是我最常用的调试手法,简单易用,如下代码可以打印出行号,文件等信息。
    define NSLog(format, ...) do {
    fprintf(stderr, "<%s : %d> %s\n",
    [[[NSString stringWithUTF8String:FILE] lastPathComponent] UTF8String],
    LINE, func);
    (NSLog)((format), ##VA_ARGS);
    fprintf(stderr, "-------\n");
    } while (0)

    对象的dealloc

    要判断一个对象有没有被释放最简单的方法就是重写该对象的deaaloc方法,在里面打印一些信息。

    查看代码的运行时间

    有时候我们想要知道某段代、某个循环的执行时间,然后分析下效率。可以使用了下列的宏,原理非常简单,就是使用NSDate计算前后的时间差。
    define TICK NSDate *startTime = [NSDate date]
    define TOCK NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])

    手机截屏

    当你想给你的运行在真机上app截屏的时候,可以使用Xcode,具体步骤Debug-->View Debugging-->Take Screenshot然后图片就出现在桌面了。

    viewDidLoad不要写太多代码

    个人建议不要在viewDidLoad方法中写入太多代码。尤其是涉及该界面中的动画的时候,因为执行viewDidLoad方法的时候,界面可能还没完全加载出来,如果此时把动画放在viewDidLoad中,可能会造成动画无法显示。当然也不建议把耗时的网络请求和动画效果都放在viewDidLoad中,界面的阻塞也会造成动画无法显示。可以尝试把动画放在viewDidAppear,viewWillAppear方法中。对于这类涉及UI的问题,调试也是比较麻烦的。。。

    常用的编译宏定义

    __OPTIMIZE__ :用于release和debug的判断
    #ifdef OPTIMIZE
    NSLog(@"release");
    #else
    NSLog(@"debug");
    #endif
    __i386____x86_64__ :用于模拟器和真机环境的判断
    if defined (i386) || (x86_64)
    NSLog(@"模拟器");
    else
    NSLog(@"真机");
    endif
    __IPHONE_OS_VERSION_MAX_ALLOWED : 当前编译的SDK版本,可以与__IPHONE_9_0等宏定义进行比较,进行不同版本下代码的执行
    if (__IPHONE_OS_VERSION_MAX_ALLOWED == __IPHONE_9_0) {
    //如果当前SDK版本为9.0是执行这里的代码
    }else{
    //否则执行这里
    }

    相关文章

      网友评论

          本文标题:Xcode 调试(一)

          本文链接:https://www.haomeiwen.com/subject/rvxrlttx.html