如何在lldb中创build和使用临时NSRange?

NSRange只是一个C结构。 我想在断点处在Xcode中创build一个临时的。

专门用于NSArray方法objectAtIndex:inRange:

这不起作用。

 (lldb) expr NSRange $tmpRange = (NSRange){0,4} (lldb) expr $tmpRange (NSRange) $tmpRange = location=0, length=4 (lldb) expr -o -- [items indexOfObject:item4 inRange:$tmpRange] error: no matching constructor for initialization of 'NSRange' (aka '_NSRange') error: 1 errors parsing expression 

我的代码在断点处有一个名为badRange的NSRange var,并将其传递给作品。 从而:

 (lldb) expr -o -- [items indexOfObject:item4 inRange:badRange] 0x7fffffffffffffff (lldb) expr badRange (NSRange) $1 = location=0, length=3 

到底是怎么回事?

谢谢。

在debugging器中创buildNSRange在OS X项目中工作正常,但不适用于iOS项目。 它在iOS上不起作用的原因是即使Foundation提供了声明该结构体的头文件,也不会公开任何相应的符号。 基本上,在iOS上,NSRange只是一个前向声明,我不知道实现的真正符号。

我最近需要创build一个NSRange,同时尝试debugging一些代码,并碰到这个线程。 目前可以使用Xcode 8.3.2为iOS项目使用以下语法。

 po [@"test words here" stringByReplacingOccurrencesOfString:@"\\s" withString:@"" options:1024 range:(NSRange){0,15}] 

这也适用:

 expr NSRange $tmpRange = (NSRange){0,15} po [@"test words here" stringByReplacingOccurrencesOfString:@"\\s" withString:@"" options:1024 range:(NSRange)$tmpRange] 

不知道什么时候这是固定的(或者如果它曾经是,因为离开(NSRange)在第二个例子导致相同的错误),但它现在工作。