Cocoa开发中的异常、信号、错误与调试
在Cocoa开发中,我们经常会遇到各种异常和错误,了解如何处理这些问题对于顺利开发至关重要。本文将围绕常见的异常类型、信号问题以及相应的调试和解决方法展开介绍。
1. 调试异常的基础
当程序遇到异常停止时,我们往往只能看到一堆汇编代码,没有变量名等信息来指引。不过,在为Mac OS X(64位Intel硬件)编译的代码中,有一个调用约定可以利用。任何函数的返回值会临时存储在名为 rax 的CPU寄存器中,在lldb调试器里,可以通过特殊变量 $rax 来访问。
当程序在 objc_exception_throw 函数中停止时, $rax 寄存器恰好包含新的异常信息。lldb调试器提供了 po 命令,用于以可读格式打印对象的值。例如:
(lldb) po $rax
$1 = 4296302928 -[__NSCFNumber length]: unrecognized selector sent to instance 0x387
我们还可以使用 po [$rax name] 和 po [$rax reason] 来获取异常的名称和原因:
(lldb) po [$rax name]
$2 = 0x00007fff783e0a30 NSInvalidArgumentException
(lldb) po [$rax reason]
超级会员免费看
订阅专栏 解锁全文
25

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



