0

我正在尝试编写一个将图像写入文件的 lldb 别名。以下工作,但有一个问题:

command regex logImageFile 's/(.+) (.+)/ expr (int) [ (id)UIImagePNGRepresentation(%1) writeToFile: @"%2.png" atomically: YES ]/'

问题是我每次都必须输入完整路径。拥有一个它始终使用的目录对我来说会好得多。所以我尝试了这个:

command regex logImageFile 's/(.+) (.+)/ expr (int) [ (id)UIImagePNGRepresentation(%1) writeToFile: @"/users/myUsername/Desktop/tempImages/%2.png" atomically: YES ]/'

现在,当我在 Xcode 控制台中输入类似以下内容时,lldb 总是说 logImageFile 不是有效命令。

logImageFile fooImage barFile

问题可能是路径内的斜线。我想我必须以某种方式逃脱它们,但是如何?请注意,我所拥有的是 lldb 正则表达式中的 NSString ——但我不知道它实际上是什么风格的正则表达式。

4

1 回答 1

3

我认为问题在于您使用该/字符来分隔正则表达式的各个部分,并且该字符也出现在文件路径的替换文本中。最简单的解决方法是使用不同的分隔符。该s///格式是最常见的,但您也可以s###轻松使用。例如

(lldb) command regex logImageFile 's#(.+) (.+)#expr (int) puts("[ (id)UIImagePNGRepresentation(%1) writeToFile: @\"/users/myUsername/Desktop/tempImages/%2.png\" atomically: YES ]")#'
(lldb) logImageFile fooImage barFile
(int) $1 = 10
[ (id)UIImagePNGRepresentation(fooImage) writeToFile: @"/users/myUsername/Desktop/tempImages/barFile.png" atomically: YES ]

我告诉expr返回类型在(int)这里,所以它正在打印它(将它分配给方便变量$1) - 但如果你使用过(void),它会避免打印任何东西。

我在puts()这里使用而不是您尝试设置的真正调用 - 但我想我发现了您原来的正则表达式命令别名的问题。试试这个。

于 2013-09-04T10:14:03.817 回答