为什么Xcode的调试器会使用Swift以这种方式跳转?

Pet*_*Guo 9 debugging xcode objective-c swift

我用F6in 调试了下面的代码Xcode 6,执行的顺序非常有趣.

这是代码--7行,在第1行设置断点:

    let request = AWSDynamoDBPutItemInput()
    request.tableName = "blah"

    let card = AWSDynamoDBAttributeValue()
    card.S = "1234"
    let email = AWSDynamoDBAttributeValue()
    email.S = "notset"

    request.item = ["card_number" : card, "email" : email]
Run Code Online (Sandbox Code Playgroud)

当我通过代码F6时,它显示以下序列(数字是行号):

1,2,4,2,3,4,6,4,5,6,7,6,7
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这是Xcode还是语言?这些类是在亚马逊的AWS SDK中定义的,不确定是否重要,它们是通过swift-objective-c桥接访问的,这可能与桥接有关.

顺便说一下,执行的最终结果是正确的.

Aar*_*ger 5

我认为您正在观察的是编译器优化的效果。它在编译时重写代码。因此,通常-Onone在调试版本中禁用优化(),而在发行版本中启用(-Ofast-Os)。


Pet*_*Guo 1

最后,我收到了对我的错误报告的回复Apple,听起来这是一个错误,并在 的测试版中得到了修复XCode。如果您正在寻求修复,请尝试测试版:

我们相信这个问题已在最新的 Xcode 6.3 beta 中得到解决,包括带有 Swift 1.2 的 iOS 8.3 SDK。

请使用此版本进行测试。如果您仍然遇到问题,请提供任何可以帮助我们调查的相关日志或信息。

这是适用于 Mac、iPhone、iPad 和 Apple Watch 的完整 Xcode 开发人员工具集的预发布版本。此版本需要 OS X Yosemite。

Xcode 6.3 - 构建 6D520o https://developer.apple.com/xcode/downloads/