Cocoa 开发中的异常处理与信号错误调试
在 Cocoa 开发过程中,我们常常会遇到各种运行时异常和信号错误,这些问题可能会导致程序崩溃,影响用户体验。本文将详细介绍几种常见的异常类型,如 NSInvalidArgumentException 和 NSRangeException ,以及因对象指针使用不当引发的信号错误,并给出相应的解决方案。
异常调试基础
当程序崩溃时,我们看到的往往是一堆汇编代码,缺乏变量名等有效信息来辅助调试。不过,在为 Mac OS X(64 位 Intel 硬件)编译的代码中,有一个调用约定可以利用。任何函数的返回值都会临时存储在名为 rax 的 CPU 寄存器中,在 lldb 调试器里,可以通过特殊变量 $rax 来访问。当程序在 objc_exception_throw 函数处停止时, $rax 寄存器恰好包含新的异常信息。
lldb 调试器提供了 po 命令,用于以可读格式打印对象的值。例如,在 lldb 提示符下输入 po $rax ,就能看到异常的详细描述:
(lldb) po $rax
$1 = 4296302928 -[__NSCFNumber length]: unrecognized selector sent to instance 0x387
我们还可以使用
超级会员免费看
订阅专栏 解锁全文
13

被折叠的 条评论
为什么被折叠?



