GDB TO LLDB COMMAND MAP

GDB TO LLDB COMMAND MAP

Below is a table of GDB commands with the LLDB counterparts. The built in GDB-compatibility aliases in LLDB are also listed. The full lldb command names are often long, but any unique short form can be used. Instead of "breakpoint set", "br se" is also acceptable.

EXECUTION COMMANDS

GDBLLDB

Launch a process no arguments.

(gdb)run

(gdb)r(lldb)process launch

(lldb)run

(lldb)r

Launch a process with arguments.

(gdb)run

(gdb)r (lldb)process launch --

(lldb)r

Launch a process for with argumentsa.out 1 2 3without having to supply the args every time.

%gdb --args a.out 1 2 3

(gdb)run

...

(gdb)run

...

%lldb -- a.out 1 2 3

(lldb)run

...

(lldb)run

...

Or:

(gdb)set args 1 2 3

(gdb)run

...

(gdb)run

...

(lldb)settings set target.run-args 1 2 3

(lldb)run

...

(lldb)run

...

Launch a process with arguments in new terminal window (Mac OS X only).

(lldb)process launch --tty --

(lldb)pro la -t --

Launch a process with arguments in existing terminal/dev/ttys006 (Mac OS X only).

(lldb)process launch --tty=/dev/ttys006 --

(lldb)pro la -t/dev/ttys006 --

Set environment variables for process before launching.

(gdb)set env DEBUG 1

(lldb)settings set target.env-vars DEBUG=1

(lldb)set se target.env-vars DEBUG=1

(lldb)env DEBUG=1

Unset environment variables for process before launching.

(gdb)unset env DEBUG

(lldb)settings remove target.env-vars DEBUG

(lldb)set rem target.env-vars DEBUG

Show the arguments that will be or were passed to the program when run.

(gdb)show args

Argument list to give program being debugged when it is started is "1 2 3".

(lldb)settings show target.run-args

target.run-args (array of strings) =

[0]: "1"

[1]: "2"

[2]: "3"

Set environment variables for process and launch process in one command.

(lldb)process launch -v DEBUG=1

Attach to a process with process ID 123.

(gdb)attach 123(lldb)process attach --pid 123

(lldb)attach -p 123

Attach to a process named "a.out".

(gdb)attach a.out(lldb)process attach --name a.out

(lldb)pro at -n a.out

Wait for a process named "a.out" to launch and attach.

(gdb)attach -waitfor a.out(lldb)process attach --name a.out --waitfor

(lldb)pro at -n a.out -w

Attach to a remote gdb protocol server running on system "eorgadd", port 8000.

(gdb)target remote eorgadd:8000(lldb)gdb-remote eorgadd:8000

Attach to a remote gdb protocol server running on the local system, port 8000.

(gdb)target remote localhost:8000(lldb)gdb-remote 8000

Attach to a Darwin kernel in kdp mode on system "eorgadd".

(gdb)kdp-reattach eorgadd(lldb)kdp-remote eorgadd

Do a source level single step in the currently selected thread.

(gdb)step

(gdb)s(lldb)thread step-in

(lldb)step

(lldb)s

Do a source level single step over in the currently selected thread.

(gdb)next

(gdb)n(lldb)thread step-over

(lldb)next

(lldb)n

Do an instruction level single step in the currently selected thread.

(gdb)stepi

(gdb)si(lldb)thread step-inst

(lldb)si

Do an instruction level single step over in the currently selected thread.

(gdb)nexti

(gdb)ni(lldb)thread step-inst-over

(lldb)ni

Step out of the currently selected frame.

(gdb)finish

(lldb)thread step-out

(lldb)finish

Return immediately from the currently selected frame, with an optional return value.

(gdb)return

(lldb)thread return

Backtrace and disassemble every time you stop.

(lldb)target stop-hook add

Enter your stop hook command(s). Type 'DONE' to end.

> bt

> disassemble --pc

> DONE

Stop hook #1 added.

Run until we hit line12or control leaves the current function.

(gdb)until 12(lldb)thread until 12

BREAKPOINT COMMANDS

GDBLLDB

Set a breakpoint at all functions namedmain.

(gdb)break main(lldb)breakpoint set --name main

(lldb)br s -n main

(lldb)b main

Set a breakpoint in filetest.cat line12.

(gdb)break test.c:12(lldb)breakpoint set --file test.c --line 12

(lldb)br s -f test.c -l 12

(lldb)b test.c:12

Set a breakpoint at all C++ methods whose basename ismain.

(gdb)break main

(Hope that there are no C functions namedmain).(lldb)breakpoint set --method main

(lldb)br s -M main

Set a breakpoint at and object C function:-[NSString stringWithFormat:].

(gdb)break -[NSString stringWithFormat:]

(lldb)breakpoint set --name "-[NSString stringWithFormat:]"

(lldb)b -[NSString stringWithFormat:]

Set a breakpoint at all Objective C methods whose selector iscount.

(gdb)break count

(Hope that there are no C or C++ functions namedcount).(lldb)breakpoint set --selector count

(lldb)br s -S count

Set a breakpoint by regular expression on function name.

(gdb)rbreak regular-expression

(lldb)breakpoint set --func-regex regular-expression

(lldb)br s -r regular-expression

Ensure that breakpoints by file and line work for #included .c/.cpp/.m files.

(gdb)b foo.c:12

(lldb)settings set target.inline-breakpoint-strategy always

(lldb)br s -f foo.c -l 12

Set a breakpoint by regular expression on source file contents.

(gdb)shell grep -e -n pattern source-file

(gdb)break source-file:CopyLineNumbers

(lldb)breakpoint set --source-pattern regular-expression --file SourceFile

(lldb)br s -p regular-expression -f file

Set a conditional breakpoint

(gdb)break foo if strcmp(y,"hello") == 0

(lldb)breakpoint set --name foo --condition '(int)strcmp(y,"hello") == 0'

(lldb)br s -n foo -c '(int)strcmp(y,"hello") == 0'

List all breakpoints.

(gdb)info break

(lldb)breakpoint list

(lldb)br l

Delete a breakpoint.

(gdb)delete 1

(lldb)breakpoint delete 1

(lldb)br del 1

WATCHPOINT COMMANDS

GDBLLDB

Set a watchpoint on a variable when it is written to.

(gdb)watch global_var(lldb)watchpoint set variable global_var

(lldb)wa s v global_var

Set a watchpoint on a memory location when it is written into. The size of the region to watch for defaults to the pointer size if no '-x byte_size' is specified. This command takes raw input, evaluated as an expression returning an unsigned integer pointing to the start of the region, after the '--' option terminator.

(gdb)watch -location g_char_ptr(lldb)watchpoint set expression -- my_ptr

(lldb)wa s e -- my_ptr

Set a condition on a watchpoint.

(lldb)watch set var global

(lldb)watchpoint modify -c '(global==5)'

(lldb)c

...

(lldb)bt

* thread #1: tid = 0x1c03, 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16, stop reason = watchpoint 1

frame #0: 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16

frame #1: 0x0000000100000eac a.out`main + 108 at main.cpp:25

frame #2: 0x00007fff8ac9c7e1 libdyld.dylib`start + 1

(lldb)frame var global

(int32_t) global = 5

List all watchpoints.

(gdb)info break

(lldb)watchpoint list

(lldb)watch l

Delete a watchpoint.

(gdb)delete 1

(lldb)watchpoint delete 1

(lldb)watch del 1

EXAMINING VARIABLES

GDBLLDB

Show the arguments and local variables for the current frame.

(gdb)info args

and

(gdb)info locals

(lldb)frame variable

(lldb)fr v

Show the local variables for the current frame.

(gdb)info locals

(lldb)frame variable --no-args

(lldb)fr v -a

Show the contents of local variable "bar".

(gdb)p bar

(lldb)frame variable bar

(lldb)fr v bar

(lldb)p bar

Show the contents of local variable "bar" formatted as hex.

(gdb)p/x bar

(lldb)frame variable --format x bar

(lldb)fr v -f x bar

Show the contents of global variable "baz".

(gdb)p baz

(lldb)target variable baz

(lldb)ta v baz

Show the global/static variables defined in the current source file.

n/a

(lldb)target variable

(lldb)ta v

Display the variables "argc" and "argv" every time you stop.

(gdb)display argc

(gdb)display argv

(lldb)target stop-hook add --one-liner "frame variable argc argv"

(lldb)ta st a -o "fr v argc argv"

(lldb)display argc

(lldb)display argv

Display the variables "argc" and "argv" only when you stop in the function namedmain.

(lldb)target stop-hook add --name main --one-liner "frame variable argc argv"

(lldb)ta st a -n main -o "fr v argc argv"

Display the variable "*this" only when you stop in c class namedMyClass.

(lldb)target stop-hook add --classname MyClass --one-liner "frame variable *this"

(lldb)ta st a -c MyClass -o "fr v *this"

EVALUATING EXPRESSIONS

GDBLLDB

Evaluating a generalized expression in the current frame.

(gdb)print (int) printf ("Print nine: %d.", 4 + 5)

or if you don't want to see void returns:

(gdb)call (int) printf ("Print nine: %d.", 4 + 5)

(lldb)expr (int) printf ("Print nine: %d.", 4 + 5)

or using the print alias:

(lldb)print (int) printf ("Print nine: %d.", 4 + 5)

Creating and assigning a value to a convenience variable.

(gdb)set $foo = 5

(gdb)set variable $foo = 5

or using the print command

(gdb)print $foo = 5

or using the call command

(gdb)call $foo = 5

and if you want to specify the type of the variable:(gdb)set $foo = (unsigned int) 5

In lldb you evaluate a variable declaration expression as you would write it in C:

(lldb)expr unsigned int $foo = 5

Printing the ObjC "description" of an object.

(gdb)po [SomeClass returnAnObject]

(lldb)expr -o -- [SomeClass returnAnObject]

or using the po alias:

(lldb)po [SomeClass returnAnObject]

Print the dynamic type of the result of an expression.

(gdb)set print object 1

(gdb)p someCPPObjectPtrOrReference

only works for C++ objects.

(lldb)expr -d 1 -- [SomeClass returnAnObject]

(lldb)expr -d 1 -- someCPPObjectPtrOrReference

or set dynamic type printing to be the default:(lldb)settings set target.prefer-dynamic run-target

Calling a function so you can stop at a breakpoint in the function.

(gdb)set unwindonsignal 0

(gdb)p function_with_a_breakpoint()

(lldb)expr -i 0 -- function_with_a_breakpoint()

Calling a function that crashes, and stopping when the function crashes.

(gdb)set unwindonsignal 0

(gdb)p function_which_crashes()

(lldb)expr -u 0 -- function_which_crashes()

EXAMINING THREAD STATE

GDBLLDB

Show the stack backtrace for the current thread.

(gdb)bt

(lldb)thread backtrace

(lldb)bt

Show the stack backtraces for all threads.

(gdb)thread apply all bt(lldb)thread backtrace all

(lldb)bt all

Backtrace the first five frames of the current thread.

(gdb)bt 5(lldb)thread backtrace -c 5

(lldb)bt 5 (lldb-169 and later)

(lldb)bt -c 5 (lldb-168 and earlier)

Select a different stack frame by index for the current thread.

(gdb)frame 12(lldb)frame select 12

(lldb)fr s 12

(lldb)f 12

List information about the currently selected frame in the current thread.

(lldb)frame info

Select the stack frame that called the current stack frame.

(gdb)up(lldb)up

(lldb)frame select --relative=1

Select the stack frame that is called by the current stack frame.

(gdb)down(lldb)down

(lldb)frame select --relative=-1

(lldb)fr s -r-1

Select a different stack frame using a relative offset.

(gdb)up 2

(gdb)down 3

(lldb)frame select --relative 2

(lldb)fr s -r2

(lldb)frame select --relative -3

(lldb)fr s -r-3

Show the general purpose registers for the current thread.

(gdb)info registers

(lldb)register read

Write a new decimal value '123' to the current thread register 'rax'.

(gdb)p $rax = 123

(lldb)register write rax 123

Skip 8 bytes ahead of the current program counter (instruction pointer). Note that we use backticks to evaluate an expression and insert the scalar result in LLDB.

(gdb)jump *$pc+8

(lldb)register write pc `$pc+8`

Show the general purpose registers for the current thread formatted assigned decimal. LLDB tries to use the same format characters asprintf(3)when possible. Type "help format" to see the full list of format specifiers.

(lldb)register read --format i

(lldb)re r -f i

LLDB now supports the GDB shorthand format syntax but there can't be space after the command:

(lldb)register read/d

Show all registers in all register sets for the current thread.

(gdb)info all-registers

(lldb)register read --all

(lldb)re r -a

Show the values for the registers named "rax", "rsp" and "rbp" in the current thread.

(gdb)info all-registers rax rsp rbp

(lldb)register read rax rsp rbp

Show the values for the register named "rax" in the current thread formatted asbinary.

(gdb)p/t $rax

(lldb)register read --format binary rax

(lldb)re r -f b rax

LLDB now supports the GDB shorthand format syntax but there can't be space after the command:

(lldb)register read/t rax

(lldb)p/t $rax

Read memory from address 0xbffff3c0 and show 4 hex uint32_t values.

(gdb)x/4xw 0xbffff3c0

(lldb)memory read --size 4 --format x --count 4 0xbffff3c0

(lldb)me r -s4 -fx -c4 0xbffff3c0

(lldb)x -s4 -fx -c4 0xbffff3c0

LLDB now supports the GDB shorthand format syntax but there can't be space after the command:

(lldb)memory read/4xw 0xbffff3c0

(lldb)x/4xw 0xbffff3c0

(lldb)memory read --gdb-format 4xw 0xbffff3c0

Read memory starting at the expression "argv[0]".

(gdb)x argv[0]

(lldb)memory read `argv[0]`

NOTE:any command can inline a scalar expression result (as long as the target is stopped) using backticks around any expression:

(lldb)memory read --size `sizeof(int)` `argv[0]`

Read 512 bytes of memory from address 0xbffff3c0 and save results to a local file astext.

(gdb)set logging on

(gdb)set logging file /tmp/mem.txt

(gdb)x/512bx 0xbffff3c0

(gdb)set logging off

(lldb)memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0

(lldb)me r -o/tmp/mem.txt -c512 0xbffff3c0

(lldb)x/512bx -o/tmp/mem.txt 0xbffff3c0

Save binary memory data starting at 0x1000 and ending at 0x2000 to a file.

(gdb)dump memory /tmp/mem.bin 0x1000 0x2000(lldb)memory read --outfile /tmp/mem.bin --binary 0x1000 0x2000

(lldb)me r -o /tmp/mem.bin -b 0x1000 0x2000

Get information about a specific heap allocation (available on Mac OS X only).

(gdb)info malloc 0x10010d680(lldb)command script import lldb.macosx.heap

(lldb)process launch --environment MallocStackLogging=1 -- [ARGS]

(lldb)malloc_info --stack-history 0x10010d680

Get information about a specific heap allocation and cast the result to any dynamic type that can be deduced (available on Mac OS X only)

(lldb)command script import lldb.macosx.heap

(lldb)malloc_info --type 0x10010d680

Find all heap blocks that contain a pointer specified by an expression EXPR (available on Mac OS X only).

(lldb)command script import lldb.macosx.heap

(lldb)ptr_refs EXPR

Find all heap blocks that contain a C string anywhere in the block (available on Mac OS X only).

(lldb)command script import lldb.macosx.heap

(lldb)cstr_refs CSTRING

Disassemble the current function for the current frame.

(gdb)disassemble(lldb)disassemble --frame

(lldb)di -f

Disassemble any functions namedmain.

(gdb)disassemble main(lldb)disassemble --name main

(lldb)di -n main

Disassemble an address range.

(gdb)disassemble 0x1eb8 0x1ec3(lldb)disassemble --start-address 0x1eb8 --end-address 0x1ec3

(lldb)di -s 0x1eb8 -e 0x1ec3

Disassemble 20 instructions from a given address.

(gdb)x/20i 0x1eb8(lldb)disassemble --start-address 0x1eb8 --count 20

(lldb)di -s 0x1eb8 -c 20

Show mixed source and disassembly for the current function for the current frame.

n/a(lldb)disassemble --frame --mixed

(lldb)di -f -m

Disassemble the current function for the current frame and show the opcode bytes.

n/a(lldb)disassemble --frame --bytes

(lldb)di -f -b

Disassemble the current source line for the current frame.

n/a(lldb)disassemble --line

(lldb)di -l

EXECUTABLE AND SHARED LIBRARY QUERY COMMANDS

GDBLLDB

List the main executable and all dependent shared libraries.

(gdb)info shared

(lldb)image list

Look up information for a raw address in the executable or any shared libraries.

(gdb)info symbol 0x1ec4

(lldb)image lookup --address 0x1ec4

(lldb)im loo -a 0x1ec4

Look up functions matching a regular expression in a binary.

(gdb)info function

This one finds debug symbols:

(lldb)image lookup -r -n

This one finds non-debug symbols:

(lldb)image lookup -r -s

Provide a list of binaries as arguments to limit the search.

Find full source line information.

(gdb)info line 0x1ec4

This one is a bit messy at present. Do:

(lldb)image lookup -v --address 0x1ec4

and look for the LineEntry line, which will have the full source path and line range information.

Look up information for an address ina.outonly.

(lldb)image lookup --address 0x1ec4 a.out

(lldb)im loo -a 0x1ec4 a.out

Look up information for for a typePointby name.

(gdb)ptype Point

(lldb)image lookup --type Point

(lldb)im loo -t Point

Dump all sections from the main executable and any shared libraries.

(gdb)maintenance info sections

(lldb)image dump sections

Dump all sections in thea.outmodule.

(lldb)image dump sections a.out

Dump all symbols from the main executable and any shared libraries.

(lldb)image dump symtab

Dump all symbols ina.outandliba.so.

(lldb)image dump symtab a.out liba.so

MISCELLANEOUS

GDBLLDB

Echo text to the screen.

(gdb)echo Here is some text\n

(lldb)script print "Here is some text"

Remap source file pathnames for the debug session. If your source files are no longer located in the same location as when the program was built --- maybe the program was built on a different computer --- you need to tell the debugger how to find the sources at their local file path instead of the build system's file path.

(gdb)set pathname-substitutions /buildbot/path /my/path

(lldb)settings set target.source-map /buildbot/path /my/path

Supply a catchall directory to search for source files in.

(gdb)directory /my/path

(No equivalent command - use the source-map instead.)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市庐氮,隨后出現(xiàn)的幾起案子租幕,更是在濱河造成了極大的恐慌,老刑警劉巖业栅,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡憨愉,警方通過查閱死者的電腦和手機(jī)兼吓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門臂港,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人视搏,你說我怎么就攤上這事审孽。” “怎么了浑娜?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵佑力,是天一觀的道長。 經(jīng)常有香客問我筋遭,道長打颤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任漓滔,我火速辦了婚禮编饺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘响驴。我一直安慰自己透且,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布豁鲤。 她就那樣靜靜地躺著秽誊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琳骡。 梳的紋絲不亂的頭發(fā)上锅论,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音日熬,去河邊找鬼棍厌。 笑死肾胯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耘纱。 我是一名探鬼主播敬肚,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼束析!你這毒婦竟也來了艳馒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤员寇,失蹤者是張志新(化名)和其女友劉穎弄慰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝶锋,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡陆爽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扳缕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慌闭。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖躯舔,靈堂內(nèi)的尸體忽然破棺而出驴剔,到底是詐尸還是另有隱情,我是刑警寧澤粥庄,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布丧失,位于F島的核電站,受9級特大地震影響惜互,放射性物質(zhì)發(fā)生泄漏布讹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一载佳、第九天 我趴在偏房一處隱蔽的房頂上張望炒事。 院中可真熱鬧,春花似錦蔫慧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盟蚣,卻和暖如春黍析,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屎开。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工阐枣, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓蔼两,卻偏偏與公主長得像甩鳄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子额划,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,513評論 2 6
  • LLDB的Xcode默認(rèn)的調(diào)試器妙啃,它與LLVM編譯器一起,帶給我們更豐富的流程控制和數(shù)據(jù)檢測的調(diào)試功能俊戳。平時用Xc...
    CoderSC閱讀 1,362評論 0 2
  • 還記得高考那一年我如何對自己說以后一定要離開這里抑胎,去遙遠(yuǎn)的地方燥滑,做很多很多事兒,那些另自己都刮目相看阿逃。我說...
    朝菌與小蛄閱讀 246評論 0 2
  • (一) 從前有一顆種子盆昙,一顆愚蠢的種子羽历,它特別向往外邊的世界,但自己還沒有破土而出的能力淡喜,但是它非常的渴望秕磷。有一天...
    fb02e35a0b32閱讀 1,538評論 5 15
  • 騎了一年的自行車瘟芝,就像怎么也喂不熟的白眼狼易桃,回到了它該去的地方。 落日的余暉順著它滾動的車輪锌俱,被碾壓得七零八碎晤郑。 ...
    一齋札記閱讀 360評論 3 2