调试在Swift 2.1 / Xcode 7中运行单元测试,定义了这个结构 -
struct MyStruct {
let x: Int
}
稍后,它会通过 -
打印出来let s = MyStruct(x: 2)
NSLog("s = \(s)")
和日志显示 -
2015-11-30 13:45:11.869 myapp[11555:521452] s = MyStruct(x: 2)
但是在LLDB中编写命令po s
会导致以下错误 -
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x7f9e93c91df0).
The process has been returned to the state before expression evaluation.
并且结构没有出现在局部变量检查器中,或者它出现但是XCode在尝试展开时崩溃了。
将struct
转为class
会导致此操作正常。
所以问题是,为什么会发生这种情况以及如何在Swift中调试结构?
答案 0 :(得分:2)
此解决方案/解决方法适用于Xcode 7 +:
在一行上声明常量结构,然后将其分配给第二行的新结构。
curl -s --user 'api:YOUR_API_KEY' \
https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
-F from='Excited User <mailgun@YOUR_DOMAIN_NAME>' \
-F to=YOU@YOUR_DOMAIN_NAME \
-F to=bar@example.com \
-F subject='Hello' \
-F text='Testing some Mailgun awesomness!'
RunTime值检查现在可以在structConstant上运行。在赋值后的任何位置设置断点(第2行),并且结构值将在变量检查器中正确显示。
调试控制台命令“(lldb)po structConstant”也可以。