调用String.componentsSeparatedByString后,Xcode 6 beta 2调试器未显示变量内容

时间:2014-07-04 20:43:30

标签: swift xcode6

由于某种原因,当我逐步执行Swift代码时,LLDB没有向我显示变量的内容。实际执行工作正常,但无论我尝试什么,我都看不到我的字符串的内容!

以下是我在变量列表中看到的内容:

enter image description here

此时type包含“name”,value包含“Logan”。但是你不能告诉我们在这看。如果我使用“快速查看”按钮,则表示值为“(无)”。

当我从控制台尝试po一个字符串时,我得到了这种胡言乱语:

(lldb) po space
error: <REPL>:1:1: error: non-nominal type '$__lldb_context' cannot be extended
extension $__lldb_context {                            
^
<REPL>:11:5: error: 'Space.Type' does not have a member named '$__lldb_wrapped_expr_0'
    $__lldb_injected_self.$__lldb_wrapped_expr_0(     
    ^     

但是这会有所不同。有时我会得到类似的东西:

class name = __NSAtom

Printing description of [0]:
(String) [0] = {
  core = {
    _baseAddress = Builtin.RawPointer = 0x00000001004016f0
    _countAndFlags = -4611686018427387894
    _owner = Some {
      Some = (instance_type = Builtin.RawPointer = 0x0000000100401820 -> 0x00007fff7b3d5390 (void *)0x00007fff7b3d5340: __NSCFString)
    }
  }
}

Printing description of declaration:
(String) declaration = <DW_OP_piece for offset 8: top of stack is not a piece>

...但绝不是字符串的实际内容!

更新

我注意到只有在函数中调用componentsSeparatedByString()后才会出现问题。 (这发生在顶部,所以当我踩到时,我没有注意到调试器实际上确实显示了值,直到这一点。)所以这个函数发生了奇怪的事情。我已更新问题标题以反映这一新信息。

有趣的是,一旦字符串被这个调用“破坏”,你就无法在其他任何地方查看它,即使传递给另一个函数也是如此。 任何常规字符串变量都不可见。绝对是一个错误,但我想知道是否有一个解决方法。调试我的程序变得非常困难!

3 个答案:

答案 0 :(得分:2)

当我遇到这种情况时,我已经在我要调试的已编译代码中使用了NSLog("\(myThing)"),或者在调试器中调用了expression NSLog("\(myThing)")&#39;} s REPL

答案 1 :(得分:1)

(请注意,您不想执行NSLog(“(someVariable)”),因为扩展字符串可能包含%格式序列 - 使用NSLog(“%@”,“(someVariable)”)或NSLog(“%@” “,someVariable)代替)

答案 2 :(得分:1)

我想添加更新:此问题仍出现在最新版本的Xcode中,包括6.2版和6.3版。

问题是componentsSeparatedByString的一部分,如果用split替换它,一切正常。我有四个这样的实例,一旦我更改它们,我的应用程序就停止了Zombie版本的NSString崩溃,我的所有变量名称都开始工作了。我改变了这样的事情......

let bits = value!.componentsSeparatedByString(" ")

...与

let bits = split(value!, { $0 == " "}, maxSplit: Int.max, allowEmptySlices: false)

我不认为分裂几乎可读,但至少它有效!