在调试期间检查Swift中的Structs不起作用

时间:2015-11-30 11:48:37

标签: xcode swift struct xcode7 lldb

调试在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中调试结构?

1 个答案:

答案 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”也可以。