logo头像

Renbo’s Blog

iOS程序调试

前言

  • 在iOS开发中如何调试程序?
    • 调用堆栈的调试技巧
    • 打全局断点
    • 局部断点
    • lldb
    • instrument:Time Profile / Core Animation / 内存泄露

1.调用堆栈的调试技巧

  • 演示Demo:

4FD54FFA-BE95-4EA2-A26E-CDD72BE4CA2F

  • Command+R,程序一运行就Crash!

16C11D5E-B62B-47BA-8565-73C3E1F7F009

  • 查看 reason: ,初步分析Crash原因:

reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]'
// 错误原因:试图在数组索引为1的位置插入nil空对象。
  • 接下来,去找是在程序哪里插入了nil空对象。查看程序的调用堆栈(先执行的方法在下面,后执行的方法在上面)

C76F31AD-C1CF-4191-A663-AB5BC9B6A154

  • 根据reason的提示,从exception堆栈的附近定位到可能出现Crash的方法!

00B2B7C9-A558-4DD0-A35B-C2C2CB6B0B5A

  • 查看调用堆栈,发现调用 [NSArray arrayWithObjects:count:] 方法后出现了崩溃,继续查看下面的方法,就可以轻易的定位到 ViewController 中的 testCrash 方法

9F6E0171-7E73-4627-B695-BE7955B8FDFD

  • 注意:在真机上调试,只显示错误信息,不显示详细的调用堆栈内容!

7B19A02F-2040-42B6-9132-6234A1B1906E

2.打全局断点

A3999DC5-E303-47BD-A5BD-C54CDAFB6CDD

  • 添加全局断点后,直接Command+R运行

ACD1928C-A23F-4A63-A0F4-33E4764471C7

  • 打全局断点后,直接就定位到错误行代码!

扩展

  • 程序Crash后,可以从控制台查看调用堆栈信息。也可以从左边面板查看调用堆栈信息。

    查看调用堆栈信息

    可以看到源程序的堆栈

    只能看到汇编语言的堆栈

上一篇