Xcode观看“无效表达式”

时间:2019-01-10 10:30:12

标签: xcode cocoapods lldb

我正在逐步完成Xcode中的一些Swift代码,我想观察值。遵循此处的许多答案中的建议(例如this one),我可以将表达式添加到局部变量窗口中。

我所处的断点是Starscream library(由daltoniam组成的该片段的最后一行,我将其包括在容器中。

for i in 0..<dataLength {
  buffer[offset] = data[i] ^ maskKey[i % MemoryLayout<UInt32>.size]
  offset += 1
}
var total = 0

我添加了两个表达式来观看:

  1. buffer[0]
  2. MemoryLayout<UInt32>.size

对于我看到的两个值都是“无效的表达式”:

xcode screenshot

这些表达式显然不是无效的,如果它们是执行前几行时遇到的代码便会抛出异常。我想念什么?我应该如何观看而不要获取“无效的表达式”

如果我从lldb提示符下调用p buffer[0],则会收到错误消息:

  

(lldb)p缓冲区[0]
  错误:警告::12:9:警告:变量初始化
      从未使用过'$ __ lldb_error_result';考虑将赋值替换为“ _”
      或将其删除
      var $ __ lldb_error_result = __lldb_tmp_error
      ~~~~ ^ ~~~~~~~~~~~~~~~~~~
      _

     

错误:: 19:5:错误:“ WebSocket”类型的值没有成员
      '$ __ lldb_wrapped_expr_72'       $ __ lldb_injected_self。$ __ lldb_wrapped_expr_72(       ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p

我尝试更改Podfile(按照Jim's answer),以便它明确获得调试代码:

pod 'Starscream', '~> 3.0.6', :configuration => 'Debug'

,我什至甚至移除了吊舱,克隆了Starscream,并将源代码作为子项目包括在内。我仍然遇到相同的错误。

1 个答案:

答案 0 :(得分:0)

当我在某些简单函数中停止时,访问buffer[0]缓冲区是UnsafeMutablePointer的表达式在表达式解析器中可以正常工作。从您直接使用expr命令的经验来看,您的问题似乎不在于此特定表达式。相反,看起来好像您在上下文中停止的某些事情完全使表达式解析器崩溃了。

请确保您未使用二进制cocoapods,并且已重建所有代码,并且所使用的所有pod已使用相同的快速编译器从头开始重建。目前,lldb和swiftc已被版本锁定-lldb只能调试使用其随附的swiftc构建的程序。

如果这不能解决问题,那么我们需要弄清楚导致该问题停止的特定功能。通过在swift项目(http://bugs.swift.org)中提交错误,似乎可以更好地处理这种事情。