首页 > 解决方案 > 我在哪里可以找到有关 LLDB 命令原始输入的文档?

问题描述

一些 LLDB 命令具有接受原始输入的信息,但我不确定该“输入”中可以包含什么。在我看来,文档没有指定它。例如:

process launch --stop-at-entry -- -program_arg value

我真的不知道 -program_arg 是什么,为什么在这里以及原始输入部分中是否可以有其他参数。

启动返回的帮助流程:

Launch the executable in the debugger.
Syntax: process launch <cmd-options> [<run-args>]

Command Options Usage:
...

This command takes options and free-form arguments.  If your arguments
resemble option specifiers (i.e., they start with a - or --), you must use
' -- ' between the end of the command options and the beginning of the
arguments.

什么帮助返回:

  <run-args> -- Arguments to be passed to the target program when it starts
                executing.

这些文档对我没有帮助。有谁知道是否有任何地方可以找到内置 LLDB 命令的原始输入规范?

标签: iosxcodedebugginglldb

解决方案


因此,我们必须能够为您的程序指定可能看起来像当前“进程启动”命令的参数的参数。由于 run-args 可以是任何东西,LLDB 命令行解析器需要知道哪些选项用于“进程启动”命令,哪些选项用于您将要启动的进程。例如,如果我们的“a.out”程序实际上有一个“--stop-at-entry”选项,并且您想为您的程序指定它,并且如果您键入:

(lldb) process launch --stop-at-entry

LLDB 会将“--stop-at-entry”解析为“进程启动”命令的选项,而不是将其视为程序的参数。如果您希望“--stop-at-entry”成为您的程序的参数,而不是您的命令的“进程启动”命令,您需要使用“--”终止“进程启动”选项,然后是任何之后将传递给进程,这就是所谓的自由格式参数:

(lldb) process launch -- --stop-at-entry

您甚至可以为您的程序“进程启动”命令指定 --stop-at-entry :

(lldb) process launch --stop-at-entry -- --stop-at-entry

但是,如果您有不以 - 或 -- 开头的参数,则不需要“--”:

(lldb) process launch --stop-at-entry arg1 arg2 arg3

这将使 --stop-at-entry 成为“进程启动”的一个选项,并且自由形式的参数是“arg1 arg2 arg3”。大多数情况下,您传递给程序的参数与进程启动的参数不同,因此如果您这样做:

(lldb) process launch --program-arg1 --program-arg2 --address 0x1000

由于我们在 --program-arg1 之前没有使用“--”,“进程启动”会认为任何选项都适用于“进程启动”命令,你会得到一个错误:

(lldb) process launch --program-arg1 --program-arg2 --address 0x1000
error: unknown or ambiguous option

所以通过使用“--”来解决这个问题:

(lldb) process launch -- --program-arg1 --program-arg2 --address 0x1000

推荐阅读