在 Xcode 中添加符号断点为您提供了一个示例模板-[NSException raise]
。我想做同样的事情但是具体来说 on -[NSRangeException raise]
。原因是我想断点only关于特定数组边界异常,例如:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 31 beyond bounds [0 .. 30]'
是的,我知道我可以添加一个捕获所有异常断点。但是,我不想这样做,因为我不想在使用该应用程序过程中生成的许多异常上设置断点。
我根据其他相关帖子尝试了很多事情NSException
。然而,我还没有发现任何可以成功工作的东西。
例如我尝试过:
这篇日记条目也很有趣,尽管没有结论:
处理 NSArray“越界” http://karanmisra.com/journal/2008/08/dealing-with-nsarray-out-of-bounds.html
所以,基本上,问题是,在 Xcode 中,如何专门且仅在范围异常上断点?
NSRangeException 不是一个类:
grep NSRangeException /System/Library/Frameworks/Foundation.framework/Headers/NSException.h
FOUNDATION_EXPORT NSString * const NSRangeException;
事实证明,范围异常只是 NSException,其名称为 NSRangeException,即:
(lldb) b s -n objc_exception_throw
Breakpoint 2: where = libobjc.A.dylib`objc_exception_throw, address = 0x00007fff8e3c2e4a
(lldb) c
Process 58216 resuming
Process 58216 stopped
* thread #1: tid = 0x1d7f4b, function: objc_exception_throw , stop reason = breakpoint 2.1
frame #0: 0x00007fff8e3c2e4a libobjc.A.dylib`objc_exception_throw
libobjc.A.dylib`objc_exception_throw:
-> 0x7fff8e3c2e4a: pushq %rbp
0x7fff8e3c2e4b: movq %rsp, %rbp
0x7fff8e3c2e4e: pushq %r15
0x7fff8e3c2e50: pushq %r14
(lldb) bt
* thread #1: tid = 0x1d7f4b, function: objc_exception_throw , stop reason = breakpoint 2.1
frame #0: 0x00007fff8e3c2e4a libobjc.A.dylib`objc_exception_throw
frame #1: 0x00007fff841ca1df CoreFoundation`-[__NSArrayI objectAtIndex:]
frame #2: 0x0000000100000eb9 range-exception`-[Foo throwIt] at range-exception.m:14
frame #3: 0x0000000100000f27 range-exception`main at range-exception.m:22
frame #4: 0x00007fff8468d5fd libdyld.dylib`start
frame #5: 0x00007fff8468d5fd libdyld.dylib`start
(lldb) expr (NSString *) [((NSException *) $arg1) name]
(NSString *) $0 = 0x00007fff74177990 @"NSRangeException"
因此,您可以在 objc_exception_throw 上设置断点,并编写一个断点条件,将名称与 NSRangeException 进行比较。就像是:
[(NSString *) [((NSException *) $arg1) name] isEqual: (NSString *) NSRangeException]
应该可以解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)