MST

星途 面试题库

面试题:Objective-C在Mac OS应用调试中如何利用断点调试分析内存访问错误

在Mac OS应用开发中,使用Objective-C语言,当怀疑代码存在内存访问错误(比如野指针导致的崩溃)时,如何通过断点调试的方式来定位问题?请详细描述操作步骤和可能用到的调试工具及命令。
13.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 启用僵尸对象检测(Zombies Instrumentation)
    • 在Xcode中,选择“Product” -> “Scheme” -> “Edit Scheme”。
    • 在弹出的窗口中,切换到“Run” -> “Diagnostics”选项卡。
    • 勾选“Zombies”,这会使系统在对象被释放后,将其转换为“僵尸对象”,当尝试访问这些对象时会抛出异常。
  2. 设置异常断点
    • 在Xcode的导航栏中,点击“Breakpoint Navigator”(快捷键Cmd + 7)。
    • 点击左下角的“+”号,选择“Add Exception Breakpoint”。
    • 在弹出的窗口中,可以设置断点捕获所有异常,或者根据需要选择特定的异常类型,如Objective - C异常。这样当异常发生时,程序会停在引发异常的代码行,有助于定位野指针等内存访问错误。
  3. 使用调试工具和命令
    • LLDB调试器:当程序因异常停在断点处时,Xcode默认会调用LLDB调试器。
    • po命令:在LLDB控制台中,可以使用po(print object的缩写)命令来打印对象的信息。例如,如果怀疑某个指针导致问题,可以使用po <指针变量名>来查看该指针指向的对象(如果它不是nil)。这有助于判断指针是否指向了预期的对象,或者是否为野指针。
    • bt命令:使用bt(backtrace的缩写)命令可以查看当前的调用栈。通过调用栈可以了解到函数的调用顺序,从而追溯到问题发生的源头,例如是从哪个函数开始出现对野指针的访问。