如何在 lldb 中创建和使用临时 NSRange?
How to create and use temp NSRange in lldb?
NSRange 只是一个 C 结构。我想在 Xcode 的断点处在 lldb 中创建一个临时的。
专门用于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 变量,并在工作中传递该变量。因此:
(lldb) expr -o -- [items indexOfObject:item4 inRange:badRange]
0x7fffffffffffffff
(lldb) expr badRange
(NSRange) = location=0, length=3
这是怎么回事?
谢谢。
在 OS X 项目中工作时,在调试器中创建 NSRange 工作正常,但它不适用于 iOS 项目。它在 iOS 上不起作用的原因是即使 Foundation 提供了声明结构的头文件,它也没有公开任何相应的符号。基本上,在 iOS 上,NSRange 只是一个前向声明,我不知道实现的真正符号。
我最近需要创建一个 NSRange,同时尝试调试一些代码并遇到了这个线程。目前可以使用 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) 会导致相同的错误),但现在可以使用了。
NSRange 只是一个 C 结构。我想在 Xcode 的断点处在 lldb 中创建一个临时的。
专门用于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 变量,并在工作中传递该变量。因此:
(lldb) expr -o -- [items indexOfObject:item4 inRange:badRange]
0x7fffffffffffffff
(lldb) expr badRange
(NSRange) = location=0, length=3
这是怎么回事?
谢谢。
在 OS X 项目中工作时,在调试器中创建 NSRange 工作正常,但它不适用于 iOS 项目。它在 iOS 上不起作用的原因是即使 Foundation 提供了声明结构的头文件,它也没有公开任何相应的符号。基本上,在 iOS 上,NSRange 只是一个前向声明,我不知道实现的真正符号。
我最近需要创建一个 NSRange,同时尝试调试一些代码并遇到了这个线程。目前可以使用 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) 会导致相同的错误),但现在可以使用了。