Xcode断点shell命令参数长度

时间:2016-12-28 19:37:33

标签: swift xcode shell breakpoints

尝试使用Xcode中的断点将大字符串传递给shell脚本

let value = Array(repeating: "a", count: 1500).joined()
let string = "{\"key\": \"\(value)\"}"

不幸的是,字符串被截断了。是否记录了此限制并且可以克服?

breakpoint

1 个答案:

答案 0 :(得分:1)

自从你提出这个问题已近一年了,我不确定它是否会解决你的问题,但我最近遇到了类似的问题,所以我认为分享我的解决方案

我有两个问题:

  1. LLDB将我的shell脚本的任何参数(以及使用po foo在控制台中打印的字符串变量)截断为1023个字符。我相信这是你的问题所涉及的问题。
  2. Xcode错误地将我的字符串中的逗号,混淆为多个参数的分隔符(例如,将foobarbaz作为参数传递给脚本并不会如果任何变量包含,,Xcode会尝试创建另一个参数,那么#39;工作正常。)
  3. 所以,首先,LLDB问题......

    默认情况下,LLDB似乎对字符长度有限制,它将打印到控制台(或通过断点参数传递给shell脚本)大约1023个字符。通过在使用变量并在控制台中运行(lldb) set set target.max-string-summary-length 10000的断点之前设置另一个断点,可以轻松地将其更改为更大的断点。这可能有点烦人,所以我创建了一个~/.lldbinit文件并将set set target.max-string-summary-length 10000放在那里,所以我不必在控制台中设置它。

    其次,逗号问题......

    在您提供上述屏幕截图的Edit breakpoint...菜单中,不仅可以提供脚本路径,还可以提供参数。我从你的问题中可以看出你提供了论证@string@。对于我的脚本,我传递了多个参数,Xcode允许您使用逗号分隔列表,例如@foo@, @bar@, @baz@。每个参数都是一个字符串。

    我注意到,如果这些字符串中包含逗号,,则有时会截断这些字符串中的一个或多个。

    所以字符串:

    { "num_friends" : "7" }

    将按预期传递给我的脚本。但字符串:

    { "num_friends" : "7", "num_deleted_friends" : "1" }

    将截断,将作为两个单独的参数传递给我的脚本。即使使用,输入,Xcode似乎也会使用@string@拆分任何字符串。

    我在我的脚本中通过简单地使用以下内容验证了这一点:

    for var in "$@"
    do
        echo "$var"
        echo "===="
    done
    

    $@展开以包含每个参数。从这里我可以看到@string@正确地传递给我的脚本,但在有,的地方被分隔为多个参数。因此,如果@string@包含逗号我的脚本会打印出来:

    @"{ \"num_friends\" : \"7\"
    ====
    \"num_deleted_friends\" : \"1\" }"
    

    而不是我的预期:

    @"{ \"num_friends\" : \"7\", \"num_deleted_friends\" : \"1\" }"
    

    因此,似乎可能是Xcode如何在断点编辑器窗口中传递@表达式中的字符串的错误。

    我的原始解决方案是用其他字符替换任何逗号,然后在我的脚本中再次替换它们。这可能是更好的方法,但我不需要它来满足我的需求。