我正在尝试编写一个 DTrace 脚本,该脚本将向我显示传递给的参数-[NSURLConnection sendSynchronousRequest:returningResponse:error:]
,但我找不到可用于从传入NSString
参数中提取字符串的结构。这个问题的答案适用于 OS X 应用程序,但不适用于我使用 iOS 模拟器的应用程序。
尽管我正在寻找这个特定示例的解决方案,但我更感兴趣的是学习为任何给定的 Objective-C 对象定义/发现底层内存结构的最佳方法。从我编写的 OS X 测试应用程序中可以看出,NSString
参数并不总是在同一个地方包含原始字符串数据。如果它的__NSCFString
位置(长度前缀)位于 16 字节中。如果它是一个__NSCFConstant
字符串,它位于其他地方,在查看原始内存转储时不会立即明显。
如果系统标头中定义了结构,可以向我展示我正在寻找的内容,那将是很好的第一步,但我认为 LLDB 也应该能够向我展示有用的提示。