zoukankan      html  css  js  c++  java
  • iOS 调试技巧

    1。如果还没有日志,在Console中输入po$eax$eax标志出错的地方,适用模拟器,真机用$r0(话说EXC_BAD_ACCESS这种错误模拟器定位就行),还可以输入比如:po[$eaxname]po[$eaxreason]等指令查看错误其他信息(注意方括号后没分号的)。然后,就没有然后了。
    2. 一种就是signal SIGABRT,大概的意思就是发送Message出现问题,信号迷失了。

    LLDB调试

    LLDB支持源文件名,符号名,文件名,等等的命令补全(Commmand Completion)。终端窗口中的补全是通过在命令行中输入一个制表符来初始化的。Xcode控制台中的补全与在源码编辑器中的补全方式是一样的:补全会在第三个字符被键入时自动弹出,或者通过Esc键手动弹出。

    watchpoint  监视一个内存块
    image    寻址等(强大)
    expression    执行一个表达式
    call     执行一个调用(界面调试)

    1. NSAssert()宏的使用:

    断言 NSAssert assert NS_BLOCK_ASSERTIONS

    NSAssert 只能在Objective-c里面使用。是assert的一个扩充。能捕获assert类异常及打印一些

    可读的日志。而assert只是让app crash(abort).

    xcode 中 大家都会在debug(QA) 模式下进行调试代码

    所以我们只需要再build Settings 中假如宏定义 变成够 控制 NSAssert的生效范围

    例如 只希望debug(QA) 下启动 release(Prod) 不启用,

    则添加 NS_BLOCK_ASSERTIONS

    使用:#define QLAllert(condition, fmt, ...) NSAssert(condition, (@"---- assert log ---- FilePath : %s function : %s lineNum : %d" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)

    2. malloc_info命令查看内存:

    (1)xcode -> Edit scheme -> Diagnostics -> Logging 选中 Malloc stack

    (2)在控制台执行command script import lldb.macosx.heap  (如果不行,就去掉command试一下,原因还不明确)

    (3)执行malloc_info --stack-history 0x10010d680 或者 malloc_info -S 0x10010d680 (对象地址) 结果是:得到这个对象分配之前的内存分配顺序

    3. .lldbinit文件

    LLDB有了一个启动时加载的文件~/.lldbinit,每次启动都会加载。所以一些初始化的事儿,我们可以写入~/.lldbinit中,比如给命令定义别名等。但是由于这时候程序还没有真正运行,也有部分操作无法在里面玩,比如设置断点。

    (1) .lldbinit是一个系统的隐藏文件,开始是不存在的,需要我们创建,但是.开头的文件名是系统预留的,不能创建这样的文件,所以我们可以使用命令行命令touch ~/.lldb创建

    (2) 创建完成后我们可以使用vi命令编辑这个文件写入我们想要的初始化操作

    (3) display @import UIKit       target stop-hook add -o "target stop-hook disable"

    • 命令1:使用display表示在stop的时候执行@import UIKit
    • 命令2:由于我们只需要执行一次@import UIKit,所以执行完成之后,执行target stop-hook disable,使原有的所有stop-hook失效

    这个命令有个缺陷,直接点击Xcode上的pausedebug view hierarchystop-hook不会生效。正在探索有没有更好的办法完成@import UIKit,如果你想到了,可以联系我~

  • 相关阅读:
    手机版页面跳转
    设计模式转载(史上最全设计模式导学目录|完整版)
    linux 常用命令
    数据结构与算法JavaScript描述.
    常用算法js版(冒泡排序 ,选择排序 ,插入排序 ,希尔排序 ,归并排序 ,快速排序 ,堆排序 ,计数排序 ,桶排序 ,基数排序)
    伪元素和伪类
    双向数据绑定
    2016年黑马程序员已出品各学科最新学习路线图:
    jQuery插件开发全解析
    蛋白质、碳水化合物和脂肪
  • 原文地址:https://www.cnblogs.com/wfwenchao/p/4881517.html
Copyright © 2011-2022 走看看