什么是GDB和LLDB
我们在开发iOS程序的时候常常会用到调试跟踪,如何正确的使用调试器来debug十分重要。xcode里有内置的Debugger,老版使用的是GDB,xcode自4.3之后默认使用的就是LLDB了。
GDB:
UNIX及UNIX-like下的调试工具
LLDB:
LLDB是个开源的内置于XCode的具有REPL(read-eval-print loop)特征的Debugger,其可以安装C++或者Python插件。
所以他们两个都是调试用的Debugger,只是LLDB是比较高级的版本,或者在调试开发iOS应用时比较好用,不然人家苹果为什么换成了LLDB了呢!
lldb与gdb命令名的对照表:http://lldb.llvm.org/lldb-gdb.html
REPL ( pronounced "repple" )
「读取-求值-输出」循环(英语:Read-Eval-Print Loop,简称REPL)是一个简单的,交互式的编程环境。这个词常常用于指代一个Lisp的交互式开发环境,但也能指代命令行的模式和例如APL、BASIC、Clojure、F#、Haskell、J、Julia、Perl、PHP、Prolog、Python、R、Ruby、Scala、Smalltalk、Standard ML、Swift、Tcl、Javascript这样的程序语言所拥有的类似的编程环境。这也被称做交互式顶层构件(interactive toplevel)
LLDB的常用命令:
1> po:打印对象,会调用对象 description 方法。是 print-object 的简写;命令po跟p很像,p输出的是基本类型,po输出的Objective-C对象。调试器会输出这个 object 的 description。
2> expr:可以在调试时动态执行指定表达式,并将结果打印出来,很有用的命令
3> print:也是打印命令,需要指定类型
4> bt:打印调用堆栈,是 thread backtrace 的简写,加 all 可打印所有thread 的堆栈
5> br l:是 breakpoint list 的简写
6> n:是换行
7> p:是打印这个对象所属的类,即其父类