LLDB 调试工具,gdb替代品;
LLVM : Low Level Virtual Machine (低级的虚拟机器)
About LLDB and Xcode
xcode 5的发布,lldb 是xcode上面的基础调试器;
比如: pop 等等这些命令;
这张图片显示了基本的命令的使用,help 可以查看命令的帮助?
LLDB 是苹果用来“从头(全部)”替换了gdb的,开发中带有LLVM编译器的协调将会带给你艺术状态去调试额外的能力在控制流中和数据监测。xcode5开始,所有的新的和先前开发的项目将会自动重新配置为使用LLDB.
标准的LLDB 暗转给提供给你一个额外的一系列命令去设计(和GDB有点类似)。额外使用标准配置,你能够很容易自定义LLDB 适应你的需求。
At a Glance (预览)
lldb完全和xcode 5 集成在一起源码开发和并且编译运行在调试经历。你访问它的状态和使用控制xcode UI提供的内容,并且使用命令的问题从xcode的调试控制台上。
Understand LLDB Basics to Unlock Advanced Features (了解LLDB基础解锁高级功能)
使用lldb命令语言,你能够使用lldb高级特点。命令的语法和常规并且容易学习。很多命令被包括成为快捷方式,节省了时间和按键。并且你能够使用LLDB help 系统快速的检查和学习存在命令的细节、快捷键、和命令选项。你可以自定义LLDB 使用命令的alias(却别名)。你能够扩展lldb通过使用python脚本和python-lldb.
Use LLDB Equivalents for Common GDB Commands (使用lldb和我们一般使用gcb是有相同的能力去调试的)
lldb包括了许多别名命令设置和gdb是一样的。如果你已经经历过了使用gdb命令, 你能够使用提供的表去查找gdb命令并且能够找到lldb的等价物,包括了-权威的和速记法的形式。
GDB and LLDB Command Examples
这个需要查看对应的lldb的命令的例子;
Standalone LLDB Workflow (独立的lldb工作流)
你经常会经历使用lldb通过使用xcode 调试特性,并且你可以使用lldb命令使用在xcode控制台上。
然而,对于开源和其他GUI 基础应用吊事,你可以使用lldb从终端窗口作为一个传统的命令调试器.(????也就是在终端上进行调试?这个还没有尝试过)
知道lldb工作像一个命令行调试器能够帮助你明白和使用lldb的全部能力在xcode控制台上。
Using LLDB as a Standalone Debugger (这个需要看一下)
**See Also **(其他关联的文章)
For a good look at how to use Xcode’s debugging features, all powered by the LLDB debugging engine, see the WWDC 2013 session video for Tools #407 WWDC 2013: Debugging with Xcode.
To see the latest advanced techniques to help you efficiently track down bugs with LLDB, view the WWDC 2013 session video for Tools #413 WWDC 2013: Advanced Debugging with LLDB.
For more information about the use of LLDB Python scripting and other advanced capabilities, visit: The LLDB Debugger.
Getting Started with LLDB
https://developer.apple.com/library/content/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-basics.html
这个是在下一节将会讲到;
Getting Started with LLDB (开始使用lldb)
lldb 是一个调试命令环境类似于gdb,LLDB 提供了隐含的调试环境给xcode,xcode包括了控制台的调试区域可以直接访问lldb命令在xcode IDE 环境。
这一章将会剪短介绍lldb句法和命令特点,告诉你使用别名的命令和介绍你到lldb帮助系统。
LLDB Command Structure lldb命令结构
所有的用户开始使用lldb的时候应该意识到lldb命令的结构和句法为了挖掘潜在的lldb和明白获取最多而信息从它那里。在很多案例中,命令体用通过lldb,列表和b-work 只是类似GDB 命令和更容易学习lldb对于gdb使用者。
Understanding Command Syntax (使用命令句法)
lldb命令句法的结构和全部常规,lldb命令完全的形式:
<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
command 、subcommand 是lldb调试器对象的名字。command 、subcommand 是有层次布置的。
一个特定的命令对象创建了一个子命令的对象(子对象跟随着这个父命令),这个自命令对象创建上下文给下一个子命令对象依次类推。action 是操作,你想要执行的内容在联合的调试对象中(command、subcommand实体);选项(option)是动作修饰符,通常需要一个值。参数根据所使用的命令的上下文来表示各种不同的事物.例如: 使用进程启动命令启动一个进程,该上下文中的参数是您在命令行上输入的内容,就像在调用调试会话之外的进程.。lldb命令行会解析完成在执行之前。Commands, subcommands, options, option 值、arguments 都是用空格分开的,双引号用于保护选项值和参数中的空格.。如果你需要输入一个反斜杠或者双引号字符到参数,你需要在参数之前写入一个反斜杠符号,允许在命令行中容易输入双引号。
(lldb) command [subcommand] -option "some "quoted" string"
也可以写成:
(lldb) command [subcommand] -option 'some "quoted" string'
// 这个应该就是和shell语法一样的咯
命令行缝隙设计帮助lldb命令句法常规和统一所有的命令。(对于gdb用户,它也意味着你可能不要应用一些参数在lldb中而你不需要再gdb中)
下面一个例子;
(lldb) breakpoint set --file test.c --line 12
命令是从和这个模型汇总分离出来的,例如:打印 典型的自定义命令形式被创建通过命令机制,可以在 Command Aliases and Help. 这里去查看;
Command Aliases and Help. 命令别名,这个需要看一下
Using Command Options (使用命令选项)
LLDB中命令选项有一个权威形式和(也被引用为“discoverable”)和压缩形式。例如:这里是一个部分命令选项在LLDB 用于命令设置断点,列出权威性的括号。
这个文件就是我们常常使用的br命令 以及对应相应的行,方法、selector、文件名、l行号、n函数名
选项可以被放在命令行的任意位置。如果参数开始就带有连接符 (-),你指示到LLDB ,你可以处理当前命令选项添加选项终止信号,双连接符(- -)。例如,如果你想启动一个进程并给进程启动命令在-stop-at-entry 选项,想相同的进程去启动带有参数-program_arg_1 和-program_arg_2 的值。
(lldb) process launch --stop-at-entry -- -program_arg_1 value -program_arg_2 value
其实这个命令我还是不知道怎么使用?/(ㄒoㄒ)/~~
Using Raw Commands (使用原生的命令)
LLDB 命令解析支持“raw”命令,当命令选项被移除,剩下的命令字符串被通过无需解释对于命令。这个对于命令来说是很便利的,参数可能有一些复杂的表达笨拙地去保护空白。例如,表达命令是一个原生的命令。
当查看一个命令的帮助的时候,输出的命令告诉你命令是否是raw(原生的),,所以,你可以知道你想要的。原生的命令仍然能够有选项,如果你的命令字符串有少量在里面,你只是它没有可选的表示通过输入一个 - - 终止符号在命令的名字后面再是在命令的字符串前面。
【应该就是想结束命令,面的不是命令】
Using Command Completion in LLDB 在LLDB 中使用完整的命令
LLDB 支持完整命令对于原始文件名字,标识名字、文件名和以及以后。终端窗口上的完成是被开始的通过输入字符在命令上。完成在xocde的控制台上和源码编辑的完成上的方式一样:completions 会被自动弹起在三个字母被写入,和completion 弹出能够手动召唤通过ESC见。另外,completions在xcode控制台上跟随着Xcode文件编辑偏好指定编辑的模板。个人的选项在一个命令能够有不同的完成这。例如;—file<path>选项到源文件===
Comparing LLDB with GDB (比较gdb和lldb)
命令行解析和统一lldb命令解析和使用lldb和gdb的使用的不同。lldb命令句法有时需哟啊强迫你去更加精确的开始你的意图,一般更多的是常规使用。
例如:设置断点的共同操作。在GDB 中,设置断点你可能进入到下面的foo.c代码的第12行。
(gdb) break foo.c:12
进入断点
(gdb) break foo
更多复杂的断点表达可能在gdb上,一个例子:gdb断点是foo.c::foo ,意思是设置断点在函数foo 在foo.c的文件下。但是,在一些gdb句法中变得错综复杂和限制gdb函数性,尤其指的是c++,坑你不是一个很可靠的方式指定方法去设置断点;这些缺乏的发生是因为gdb命令行句法被支持在一个复杂的指定表式的分析。
lldb断点命令,通过比较,请求只是一个简单、直接途径在它的表达式中提供了有利的学习自动完成和能力去设置断点更加的复杂情况。去设置相同的文件和行断点在lldb中。
(lldb) breakpoint set --file foo.c --line 12
设置断点在方法名字为foo上
(lldb) breakpoint set --name foo
设置断点的名字更加的有效lldb相比于gdb。因为你能够制定你想要设置的断点在一个函数通过方法名字。设置断点在c++方法的名字为foo中,输入:
(lldb) breakpoint set --method foo
设置断点在oc的selectors 名字为alignLeftEdges: 上。
你能够限制其他断点通过指定可执行的映像通过使用--shlib <path> 表达式。
(lldb) breakpoint set --shlib foo.dylib --name foo
lldb命令在这段中显示,使用发现命令的名字和权威性形式的选择,可能似乎有点冗长。然而,只是当做gdb,lldb有一个剪短的名字,创建一个压缩的命令形式。例如,通过下面的命令表达式示范操作相同的命令:
(lldb) breakpoint set --name "-[SKTGraphicView alignLeftEdges:]"
(lldb) br s --name "-[SKTGraphicView alignLeftEdges:]"
相似的,你能够合并剪短唯一字符串匹配缩写的的选项形式去减少长度。使用两个在一起能够减少命令的表达式。例如:
(lldb) breakpoint set --shlib foo.dylib --name foo
转变:
(lldb) br s -s foo.dylib -n foo
使用这些lldb的特性提供很多相同的速记法想使用gdb一样。查看断点命令和其他段在GDB and LLDB Command Examples 中可以看到更多的例子怎么使用剪短唯一字符串匹配使用缩写形式选项能够保存按键。
Scripting with Python (python脚本)
对于高级的用户,lldb有一个简历python翻译器容易到达的通过使用脚本命令。所有的调试特性是可用的作为类在python翻译器。结果更多的复杂的命令在gdb中被介绍定义命令能够被实现通过python的函数使用lldb-python库然后下载脚本运行会话,访问他们带有脚本命令。更多的信息关于lldb-python库,查看LLDB Python Reference 和 LLDB Python Scripting Example 段在The LLDB Debugger website 上。
**Command Aliases and Help **(命令别名和帮助)
现在你名表了lldb语法和命令动态,转到你注意去亮哥非常有用的lldb的有用的特点,命令别名和帮互系统(command aliases /help system )
Understanding Command Aliases (明白命令别名)
使用lldb中的命令别名的机制去构建别名对于共同使用的命令,例如,如果你重复输入
(lldb) breakpoint set --file foo.c --line 12
可以通过别名来构建:
(lldb) command alias bfl breakpoint set -f %1 -l %2
你可以输入命令如下:
(lldb) bfl foo.c 12
因为命令别名在很多情况下是很有用的,你应该熟悉他们的环境。对于一个完整的命令别名构建的解释,限制和语法,使用lldb帮助系统,如:
(lldb) help command alias
注意:默认配置,常用的公共的别名命令已经被加到lldb中(例如:步骤,下一个,继续)没有尝试去构架一个测地的系列的别名。在lldb开发团队中,很方面去构建命令到一个字母或者2个字母给用户,然而,很容易设置lldb命令系列成为他们喜欢的方式,lldb读取了 ~/.lldbinit的文件。 这个文件存储了别名,所以你能够很容易的提醒你自己你的设置。查看当前他们定义的别名,用help -命令 然后找到当前定义好的别名在帮助输出那里。
Using LLDB Help (使用lldb帮助)
勘察lldb帮助系统去获得更多关于lldb所提供的和查看lldb命令的细节构建。熟悉help命令给你访问额外的命令文档在帮助系统中。
一个简单的帮助命令能够返回一系列的顶级的lldb命令。例如: 下面列表:
command unalias b // 取消别名
command alias b breakpoint
A more directed way to explore what’s available in LLDB is to use the apropos command: It searches the LLDB help documentation for a word and dumps a summary help string for each matching command. For example:
一个更加直接的方式去显示lldb的用处和使用 apropos命令,它查询了lldb的帮助文档对于一个档次和一个简短的帮助字符串。
这两个内容: (调试的时候可以去查看)
GDB and LLDB Command Examples
Using LLDB as a Standalone Debugger