swift - 在使用断点 Swift 时查找变量的值

标签 swift xcode debugging

我有一个简单的测试:

func testAdd(){
        let result = calc.evaluate(op: "+", arg1: 2.0, arg2: 9.0)
        print("result - \(result)")
        XCTAssert(result == 11.0, "Calculator operation failed")
    }

它确实通过了,但我尝试在控制台中设置断点并检查值,但没有任何值,为什么?请看下面的截图:

enter image description here

当我右键单击“结果”(在左 Pane 中)并选择“打印”时,“结果”输出的说明是 - (Double) result = <variable not available>

但即使是 print 函数也确实打印了那个值。为什么?

最佳答案

您的“结果”变量是一个临时的本地中间变量。

如果代码是在 Release build 中编译的(与 Debug build 相对),那么编译器可能已经优化了大部分中间变量,并以完全不同的顺序完成相同的计算以获得相同的结果.因此,在生成的运行代码中没有要打印的具有该值的变量。

如果您想查看变量值,请尝试在build设置中切换为使用调试构建。或者将所需的变量值分配给在另一个 Swift 文件中实例化的全局变量(Swift 编译器不太可能将其优化为不存在)。

关于swift - 在使用断点 Swift 时查找变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55892196/

相关文章:

ios - 在 Swift 5、iOS 14 中编码可编码结构时出现 NSJSONSerialization 错误 : Invalid top-level type in JSON write

swift - SpriteKit 数组错误 SKNode.obstaclesFromNodes

xcode - 调试Quick Look插件

swift - 架构 i386 的 undefined symbol : "_OBJC_CLASS_$_SecIdentity"

ios - 画一条线连接两个圆

ios - Cocoa Touch Objective-C Framework 中的 Swift 类

swift - CloudKit 权利缺失

iphone - 如何在基于 View 的应用程序中添加导航 Controller

debugging - 为什么我的 Go 调试器不加载所有符号,导致调试器中缺少局部变量?

debugging - 如何从扩展程序登录 Firebug?