2014-11-03 57 views
8

我在Xcode 6中用F6调试了下面的代码,执行顺序非常有趣。为什么Xcode的调试器使用Swift以这种方式跳转?

下面是代码 - 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] 

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

1,2,4,2,3,4,6,4,5,6,7,6,7 

这是为什么?这是Xcode还是语言?这些类在Amazon的AWS开发工具包中定义,不确定是否重要,它们是通过swift-objective-c桥接访问的,这可能与桥接有关。

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

+0

这几乎是正常的 - 你看到类似于普通的Objective-C,并且我认为这个效果在Swift中会变得更糟。 – 2014-11-03 03:17:51

+0

在任何环境中都不是那么不寻常。特别是在循环中,您会看到在开始时跳到底部和/或在结束时跳到顶部。 ARC背后的逻辑增加了更多的陌生感。 – 2014-11-03 03:22:29

+0

@peter您是否找到解决方案?我觉得我在这里疯狂尝试编码,而我的屏幕变得疯狂。 – boidkan 2015-01-16 21:16:00

回答

1

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

我们认为此问题已在最新的Xcode 6.3测试版中得到解决,包括使用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/

+0

谢谢,遗憾的是我不能在当前项目中使用XCode 6.3,直到测试结束。不过,我会检查出来。 – boidkan 2015-02-13 17:30:24

+0

问题仍然存在与osx优胜美地,xcode 6.3(稳定)和iOS 8.4。 – iAnurag 2015-08-05 13:31:16

4

我想你正在观察的是编译器优化的效果。它在编译时重写你的代码。由于这个原因,在调试版本上禁用优化(-Onone)是正常的,但在发布版本上启用它(-Ofast-Os)。

0

你应该打开你的项目和目标配置页面,构建设置选项卡下,定位“苹果LLVM 6.1-代码生成”标签,更改优化级别调试为“无[-O0]”,清理你的项目,你就完成了!

相关问题