尝试使用Xcode中的断点将大字符串传递给shell脚本
let value = Array(repeating: "a", count: 1500).joined()
let string = "{\"key\": \"\(value)\"}"
不幸的是,字符串被截断了。是否记录了此限制并且可以克服?
答案 0 :(得分:1)
自从你提出这个问题已近一年了,我不确定它是否会解决你的问题,但我最近遇到了类似的问题,所以我认为分享我的解决方案
我有两个问题:
po foo
在控制台中打印的字符串变量)截断为1023个字符。我相信这是你的问题所涉及的问题。,
混淆为多个参数的分隔符(例如,将foo
,bar
和baz
作为参数传递给脚本并不会如果任何变量包含,
,Xcode会尝试创建另一个参数,那么#39;工作正常。)所以,首先,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如何在断点编辑器窗口中传递@
表达式中的字符串的错误。
我的原始解决方案是用其他字符替换任何逗号,然后在我的脚本中再次替换它们。这可能是更好的方法,但我不需要它来满足我的需求。