ios基础之调试篇

 1.常用3种断点

文件行断点:在某一行代码处的断点

符号断点:可以定位到某些方法

异常断点:可以在抛出或者捕获异常时调用,可以选择不同的语言(c/c++/object-c)

swift断点:捕捉swift中的错误

测试失败的断点:还未尝试过.


2.抛出异常:使用断言NSAssert

NSAssert(i<95@"i=%d已经大于95",i);

还能使用NSAssert1,NSAssert2,NSAssert3,NSAssert4,NSAssert5.


3.发布时移除NSAssert

步骤:

为工程添加一个新的scheme,命名最好不同;

编辑这个新的scheme,在Info选项->Build Configuration 下改为release,为发布而配置。

在新的scheme下,进入Target->Build Settings->Apple LLVM 7.0-Preprocessing->Preprocessor Macros目录下;

为release选项添加NS_BLOCK_ASSERTIONS即可。

(注:NS_BLOCK_ASSERTIONS是Foundation框架中定义好的预处理宏)


4.发布时移除NSLog

基本思路是用一个新的输出的宏取代NSLog,如果是已有的工程可能工作量比较大.

在pch文件中加入新的宏:

/*

#ifdef  DEBUG

#     define DLog(...) NSLog(__VA_ARGS__)

#else

#     define DLog(...)

#endif

*/

注意__VA_ARGS__前后是长横。

同样进入进入Target->Build Settings->Apple LLVM 7.0-Preprocessing->Preprocessor Macros目录下,

将Debug改为DEBUG或者DEBUG=1.(新的系统下应该可以省略这一步)

记得以后输出时统一使用DLog即可.


5.使用LLDB调试工具

进入LLDB工具:设置一个断点,运行到断点时,将All Output改为Debugger Output.

 5.1 使用命令设置断点(在第30行):

(lldb) breakpoint set --file ViewController.m --line 31

(lldb) br s -f ViewController.m -l 30

(lldb) b ViewController.m:31

如果要在所有用某个方法调用时挂起(符号断点),命令如下:

(lldb) breakpoint set --selector findAll

(lldb) br s -S findAll

查看断点:

(lldb) breakpoint list

(lldb) br l

删除断点(每个断点都有编号):

(lldb) breakpoint delete

(lldb) br del

单步进入:

(lldb) thread step-in

(lldb) step

(lldb) s

单步跳过:

(lldb) thread step-over

(lldb) next

(lldb) n

继续运行:

(lldb) thread continue

(lldb) continue

(lldb) c

5.2   观察点变化(可以查看变量的变化)

设置观察点

(lldb) watchpoint set variable sum

(lldb) wa s v sum

查看观察点

(lldb) watchpoint list

(lldb) watch l

删除观察点(没有编号则会删除所有观察点)

(lldb) watchpoint delete 观察点编号

(lldb) watch delete 观察点编号

(lldb) watch del 观察点编号

5.3查看变量和计算表达式命令

(lldb) frame variable

(lldb) fr v

单个变量

(lldb) frame variable sum

(lldb) fr variable

(lldb) fr v

(lldb) print sum

查看全局变量

(lldb) target variable

(lldb) ta v

计算基本数据类型表达式

(lldb) expression sum

(lldb) expr sum

(lldb) p sum  //打印单个变量

计算对象数据类型表达式

(lldb) expression -o -- self.textArray[0]

(lldb) po self.textArray[2]


6.异常堆栈报告分析

将main函数改为如下

    @try {

        @autoreleasepool {

            return UIApplicationMain(argc, argv, nilNSStringFromClass([AppDelegate class]));

        }

    }

    @catch (NSException *exception) {

        NSLog(@"Stack Trace:%@",[exception callStackSymbols]);

    }

所有的异常最后都会抛出到main函数中。查看输出的异常日志。

3   BreakPointTest                      0x000df6fb -[ViewController viewDidLoad] + 446


7.调试问题汇总

1.如果能够捕获到异常使用异常分析机制,或者查看崩溃日志

2.如果无法捕获异常,也没有输出则需要保证方法不要重复调用,否则可能引起内存问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值