首页 iOS.& Swift Books 高级Apple调试& Reverse Engineering

9
坚持不懈&定制命令 由Derek Selander撰写

由于您可能在您的发展职业中注意到,在真正糟糕的情况下键入同样的事情。如果使用难以键入的特定命令,则没有理由必须输入整个缺货。正如您在使用正则表达式创建断点时所学到的那样,您会疯狂打字一些SWIFT功能的全名。

相同的想法可以应用于LLDB中执行的任何命令,设置或代码。但是,到目前为止,还没有解决两个问题:持续到您的命令并为他们创建快捷方式!每次运行新的LLDB会话时,您所执行的所有先前的命令都会消失!

In this chapter, you’ll learn how to persist these choices through the .lldbinit file. By persisting your choices and making convenience commands for yourself, your debugging sessions will run much more smoothly and efficiently. This is also an important concept because from here on out, you’ll use the .lldbinit file on a regular basis.

坚持......怎么样?

每当调用LLDB时,它会搜索几个目录进行特殊初始化文件。如果发现,只要LLDB启动但在LLDB附加到该过程之前,这些文件将被加载到LLDB中“(重要的是要知道您尝试在init文件中执行任意代码)。

您可以使用这些文件来指定设置或创建自定义命令以进行调试竞标。

LLDB在以下位置搜索初始化文件:

  1. 〜/ .lldbinit- [上下文] where [context] is Xcode.,如果要使用Xcode调试,或者 LLDB. 如果您使用的是LLDB的命令行Incarnation。

    For example, if you wanted commands that were only available in LLDB while debugging in the Terminal, you’d add content to 〜/ .lldbinit.-lldb, while if you wanted to have commands only available to Xcode you’d use 〜/ .lldbinit.-Xcode.

  2. 接下来,LLDB搜索找到的内容 〜/ .lldbinit.。这是大多数逻辑的理想文件,因为您要在LLDB的Xcode和终端会话中使用命令。

  3. Finally, LLDB will search the directory where it was invoked. Unfortunately, when Xcode launches LLDB, it’ll launch LLDB at the / root directory. This isn’t an ideal place to stick an .lldbinit file, so this particular implementation will be ignored throughout the book.

创建.lldbinit文件

In this section you’re going to create your first .lldbinit file.

nano ~/.lldbinit
command alias -- Yay_Autolayout expression -l objc -O -- [[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] recursiveDescription]
(lldb) Yay_Autolayout
(lldb) help Yay_Autolayout
command alias -H "Yay_Autolayout will get the root view and recursively dump all the subviews and their frames" -h "Recursively dump views" -- Yay_Autolayout expression -l objc -O -- [[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] recursiveDescription]

具有参数的命令别名

您刚刚创建了一个不需要任何参数的独立命令别名。但是,您通常希望创建可以提供输入的别名。

command alias cpo expression -l objc -O --

(lldb) po self
<Signals.MasterViewController: 0x7fc8295071a0>
(lldb) po 0x7fc8295071a0
(lldb) cpo 0x7fc8295071a0
<Signals.MasterViewController: 0x7fc8295071a0>

然后去哪儿?

You’ve learned how to create aliases for simple commands as well as persist them in the .lldbinit file. This will work across both Xcode and Terminal invocations of LLDB.

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您有关于UI,UX,突出显示或我们在线阅读器的其他功能的反馈,您可以将其发送到设计团队,其中表格如下所示:

© 2021 Razeware LLC

您可以免费读取,本章的部分显示为 混淆了 文本。解锁这本书,以及我们整个书籍和视频目录,带有Raywenderlich.com的专业订阅。

现在解锁

要突出或记笔记,您需要在订阅中拥有这本书或自行购买。