LLDB之理解LLDB基本命令语法

    与 LLDB 进行交互就是在调试区域部分输入相应的命令,每一个 LLDB 命令都包含着 0 个或者多个子命令,并且可能具有一个或者多个可选的参数,就像下面一样:

<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]

<command>(命令)<subcommand>(子命令)LLDB调试命令的名称,命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。
<action>:在上下文中执行命令的操作
<options>:命令选项,动作的修改者
<arguement>:命令的参数, 根据使用的命令的上下文来表示各种不同的东西
[]:表示命令是可选的,可以有也可以没有

注意: LLBD命令行的解析操作在执行命令之前完成。上面的这些元素之间通过空格来分割,如果某一元素自身含有空格,则可以使用双引用。而如果元素中又包含双引号,则可以使用反斜杠;或者元素使用单引号。在LLDB中单引号和双引号是等价的,例如:
        (lldb) command [subcommand] -option "some \"quoted\" string"
        can also be written:
        (lldb) command [subcommand] -option 'some "quoted" string'

举个例子,假设我们给testPerson方法设置一个断点,我们使用下面的命令:
       
breakpoint set -n testPerson
这个命令对应到上面的语法就是:

command: breakpoint 表示断点命令
action: set 表示设置断点
option: -n表示根据方法name设置断点
arguement: testPerson 表示方法名为testPerson

子命令(Subcommands)

子命令是组织相关操作的分隔标识。一个命令的最终子命令将是一个动词表面将要执行的动作。例如:管理断点的命令由breakpoint开始,然后执行相应命令,breakpoint listbreakpoint disable,表示列举所有断点和使断点失效,最后一个词义标识很清楚。

参数(Arguments)

一个命令可能要求一个或者多个参数,参数是动作执行的分隔标识。例如:breakpoint disable是要求给与一个参数指明具体失效的断点,向: breakpoint disable 1,使断点ID1的断点失效。
   
命令选项(Options)

一个命令当中可能包含一个或者多个命令选项,命令选项使用双虚线(--)开始用于不同的组合来修改执行的动作。有一些命令也使用了单虚线 (-)开始进行操作.例如:当我们需要设置一个断点,在第一次触发的时候删除,可以使用命令为breakpoint set --one-shot 或者  breakpoint set -o.-o--one-shot的缩写,所有前后功能是一样的。我们可以在触发断点之后,在console中输入 help br set,我们将可以看到命令功能: -o ( --one-shot )  The breakpoint is deleted the first time it causes a stop.

命令的格式(Command Forms)

LLDB命令是可以以许多格式显示的,例如:下面3种格式所执行的功能是一样的,都表示打印变量someVariable

Canonical form(标准样式)   expression --object-description -- someVariable
Abbreviated form(
缩写样式) e -O -- someVariable
Alias(
别名样式)            po someVariable

上面e就是expression的缩写,-O就是--object-description的缩写,别名就是使用另外名称替代原有功能,这个在console中可以通过help command alias得到对应的帮助信息。在开发中我们经常使用缩写和别名进行操作,方便,快捷。

学会使用help命令

LLDB为我们提供了大量的文档,在调试的时候,我们经常可以通过help得到帮助信息,比如:

1:直接输入help,可以得到大量的命令信息

(lldb) help
Debugger commands:

apropos           -- Find a list of debugger commands related to a particular
word/subject.
breakpoint        -- A set of commands
for operating on breakpoints. Also see
_regexp-
break.
bugreport         --
Set of commands for creating domain specific bugreports.
command           -- A set of commands
for managing or customizing the
debugger commands.
....
....
....

For more information on any command, type 'help <command-name>'.

2
:对于如何使用对应的子命令,都会有相应的提示,根据提示操作即可,例如:我们想了解与断点相关的信息,就可以help breakpoint,我们将可以看到所有与断点相关的信息。

(lldb) help breakpoint
The following subcommands are supported:

clear   -- Clears a breakpoint or set of breakpoints
in the executable.
command -- A set of commands
for adding, removing and examining bits of
code to be executed when the breakpoint
is hit (breakpoint
'commands').
delete  -- Delete the specified breakpoint(s).  If no breakpoints are
specified, delete them all.
disable -- Disable the specified breakpoint(s) without removing them.  If
none are specified, disable all breakpoints.
enable  -- Enable the specified disabled breakpoint(s). If no breakpoints
are specified, enable all of them.
list    -- List some or all breakpoints at configurable levels of detail.
modify  -- Modify the options on a breakpoint or set of breakpoints
in
the executable.  If no breakpoint
is specified, acts on the
last created breakpoint.  With the exception of -e, -d and -i,
passing an empty argument clears the modification.
name    -- A set of commands to manage name tags
for breakpoints
    set     -- Sets a breakpoint or set of breakpoints
in the executable.

For more help on any particular subcommand, type 'help <command> <subcommand>'.

3: 同理如果想知道操作断点的具体命令,例如:如何显示当前所有断点,由上可知list是我们需要的指令:

(lldb) help br list
       List some or all breakpoints at configurable levels of detail.

Syntax: breakpoint list <cmd-options> [<breakpt-id>]

Command Options Usage:
  breakpoint list [-Dbi] [<breakpt-id>]
  breakpoint list [-Dfi] [<breakpt-id>]
  breakpoint list [-Div] [<breakpt-id>]
  ...
  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.

这里提供了我们操作的语法和指令,可以由帮助信息进行相应操作:

(lldb) br list
Current breakpoints:
1: file = '/Users/longshihua/Desktop/LLDB
调试技巧学习/LLDB调试技巧学习/ViewController.swift', line = 29, exact_match = 0, locations = 1, resolved = 1, hit count = 1

  1.1: where = LLDB调试技巧学习`LLDB调试技巧学习.ViewController.testPerson () -> () + 207 at ViewController.swift:30, address = 0x000000010e0b916f, resolved, hit count = 1  
...
...
...

4:尽可能多的使用缩写和别名,方便操作,输入(lldb) help,我们在底部可以看到如下信息:

Current command abbreviations (type 'help command alias' for more info):

  add-dsym  -- ('target symbols add')  Add a debug symbol file to one of the
               target's current modules by specifying a path to a debug symbols
               file, or using the options to specify a module to download
               symbols for.
  attach    -- ('_regexp-attach')  Attach to a process id if in decimal,
               otherwise treat the argument as a process name to attach to.
  b         -- ('_regexp-break')  Set a breakpoint using a regular expression
               to specify the location, where <linenum> is in decimal and
               <address> is in hex.
  bt        -- ('_regexp-bt')  Show a backtrace.  An optional argument is
               accepted; if that argument is a number, it specifies the number
               of frames to display.  If that argument is 'all', full
               backtraces of all threads are displayed.
...
...
...

For more information on any command, type 'help <command-name>'.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值