如何在Xcode中查看Foundation.Data字节缓冲区的底层字节?
如何在Xcode调试器中查看Foundation.Data的底层内存
当处理二进制格式解析时,传入的Foundation.Data对象在Xcode调试器中无法通过右键菜单查看正确的底层内存,常见异常表现:
_representation显示地址0x0slice(1)、slice(2)、lowerBound显示非目标内存块upperBound展示无关内容storage显示地址0x0
以下是几种直接有效的解决方法:
方法1:用LLDB命令获取内存地址并查看
在调试控制台中执行以下命令(替换data为你的Data变量名),直接输出底层内存的起始地址:
po data.withUnsafeBytes { (ptr: UnsafeRawBufferPointer) in print(ptr.baseAddress!) }
得到地址后,通过Xcode -> Debug -> Debug Workflow -> View Memory输入该地址,即可查看原始字节。
也可以直接在控制台用memory read命令查看指定长度的内存:
memory read -c <需要查看的字节数> <输出的内存地址>
示例:查看前16字节
memory read -c 16 0x1234567890ab
方法2:自定义调试输出(快速查看字节)
给Data扩展一个调试用的十六进制描述,方便直接在控制台查看:
extension Data { var debugHexString: String { map { String(format: "%02x ", $0) }.joined() } }
调试时在控制台输入:
po data.debugHexString
即可直接看到格式化后的字节内容。
方法3:临时转为指针访问(调试阶段)
在代码中添加临时调试代码(调试完成后建议删除),通过闭包获取指针:
data.withUnsafeBytes { rawBuffer in guard let bytePtr = rawBuffer.baseAddress?.assumingMemoryBound(to: UInt8.self) else { return } // 断点打在此处,调试器中可查看bytePtr指向的内存 // 也可直接通过bytePtr[0]、bytePtr[1]访问字节 }
断点设置在闭包内部后,即可在调试器中查看bytePtr对应的内存地址和内容。
内容的提问来源于stack exchange,提问作者hippietrail
相关产品推荐
相关产品推荐

