欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Debugger - LLDB vs GDB

最编程 2024-03-01 22:31:20
...



LLDB TO GDB COMMAND MAP

Below is a table of LLDB commands with the GDB counterparts. The built in GDB compatability aliases in GDB are also listed.

EXECUTION COMMANDS

LLDB

GDB

Launch a process no arguments.

(lldb) process launch

(lldb) run

(lldb) r

(gdb) run

(gdb) r

Launch a process with arguments ​​<args>​​.

(lldb) process launch -- <args>

(lldb) r <args>

(gdb) run <args>

(gdb) r <args>

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

% lldb -- a.out 1 2 3

(lldb) run

...

(lldb) run

...

% gdb --args a.out 1 2 3

(gdb) run

...

(gdb) run

...

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

(lldb) process launch --tty -- <args>

(lldb) pro la -t -- <args>


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

(lldb) process launch --tty=/dev/ttys006 -- <args>

(lldb) pro la -t/dev/ttys006 -- <args>


Attach to a process with process ID 123.

(lldb) process attach --pid 123

(lldb) attach -p 123

(gdb) attach 123

Attach to a process named "a.out".

(lldb) process attach --name a.out

(lldb) pro at -n a.out

(gdb) attach a.out

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

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

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

(gdb) attach -waitfor a.out

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

(lldb) thread step-in

(lldb) step

(lldb) s

(gdb) step

(gdb) s

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

(lldb) thread step-over

(lldb) next

(lldb) n

(gdb) next

(gdb) n

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

(lldb) thread step-inst

(lldb) si

(gdb) stepi

(gdb) si

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

(lldb) thread step-inst-over

(lldb) ni

(gdb) nexti

(gdb) ni

Step out of the currently selected frame.

(lldb) thread step-out

(lldb) finish

(gdb) finish

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.

BREAKPOINT COMMANDS

LLDB

GDB

Set a breakpoint at all functions named main.

(lldb) breakpoint set --name main

(lldb) br s -n main

(lldb) b main

(gdb) break main

Set a breakpoint in file test.c at line 12.

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

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

(lldb) b test.c:12

(gdb) break test.c:12

Set a breakpoint at all C++ methods whose basename is main.

(lldb) breakpoint set --method main

(lldb) br s -M main

(gdb) break main

(Hope that there are no C funtions named main).

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

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

(lldb) b -[NSString stringWithFormat:]

(gdb) break -[NSString stringWithFormat:]

Set a breakpoint at all Objective C methods whose selector is count.

(lldb) breakpoint set --selector count

(lldb) br s -S count

(gdb) break count

(Hope that there are no C or C++ funtions namedcount).

List all breakpoints.

(lldb) breakpoint list

(lldb) br l

(gdb) info break

Delete a breakpoint.

(lldb) breakpoint delete 1

(lldb) br del 1

(gdb) delete 1

WATCHPOINT COMMANDS

LLDB

GDB

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

(lldb) watchpoint set variable -w write global_var

(lldb) watch set var -w write global_var

(gdb) watch 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.

(lldb) watchpoint set expression -w write -- my_ptr

(lldb) watch set exp -w write -- my_ptr

(gdb) watch -location g_char_ptr

Set a condition on a watchpoint.

(lldb) watch set var -w write 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.

(lldb) watchpoint list

(lldb) watch l

(gdb) info break

Delete a watchpoint.

(lldb) watchpoint delete 1

(lldb) watch del 1

(gdb) delete 1

EXAMINING VARIABLES

LLDB

GDB

Show the arguments and local variables for the current frame.

(lldb) frame variable

(gdb) info args

and

(gdb) info locals

Show the local variables for the current frame.

(lldb) frame variable --no-args

(lldb) fr v -a

(gdb) info locals

Show the contents of local variable "bar".

(lldb) frame variable bar 

(lldb) fr v bar 

(lldb) p bar 

(gdb) p bar

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

(lldb) frame variable --format x bar 

(lldb) fr v -f x bar 

(gdb) p/x bar

Show the contents of global variable "baz".

(lldb) target variable baz 

(lldb) ta v baz 

(gdb) p baz

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

(lldb) target variable 

(lldb) ta v 

n/a

Display a the variable "argc" and "argv" every time you stop.

(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

(gdb) display argc

(gdb) display argv

Display a the variable "argc" and "argv" only when you stop in the function named main.

(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 named MyClass.

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

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

EXAMINING THREAD STATE

LLDB

GDB

Show the stack backtrace for the current thread.

(lldb) thread backtrace

(lldb) bt

(gdb) bt

Show the stack backtraces for all threads.

(lldb) thread backtrace all

(lldb) bt all

(gdb) thread apply all bt

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

(lldb) frame select 12

(gdb) frame 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.

(lldb) up

(lldb) frame select --relative=1

(gdb) up

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

(lldb) down

(lldb) frame select --relative=-1

(lldb) fr s -r-1

(gdb) down

Select a different stack frame using a relative offset.

(lldb) frame select --relative 2

(lldb) fr s -r2


(lldb) frame select --relative -3

(lldb) fr s -r-3

(gdb) up 2

(gdb) down 3

Show the general purpose registers for the current thread.

(lldb) register read

(gdb) info registers

Show the general purpose registers for the current thread formatted as signed decimal. LLDB tries to use the same format characters as printf(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.

(lldb) register read --all

(lldb) re r -a

(gdb) info all-registers

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

(lldb) register read rax rsp rbp

(gdb) info all-registers rax rsp rbp

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

(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

(gdb) p/t $rax

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

(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

(gdb) x/4xw 0xbffff3c0

Read memory starting at the expression "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]`

(gdb) x argv[0]

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

(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

(gdb) set logging on

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

(gdb) x/512bx 0xbffff3c0

(gdb) set logging off

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

(lldb) memory read --outfile /tmp/mem.bin --binary 0x1000 0x1200

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

Disassemble the current function for the current frame.

(lldb) disassemble --frame

(lldb) di -f

(gdb) disassemble

Disassemble any functions named main.

(lldb) disassemble --name main

(lldb) di -n main

(gdb) disassemble main

Disassemble an address range.

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

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

(gdb) disassemble 0x1eb8 0x1ec3

Disassemble 20 instructions from a given address.

(lldb) disassemble --start-address 0x1eb8 --count 20

(lldb) di -s 0x1eb8 -c 20

(gdb) x/20i 0x1eb8

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

(lldb) disassemble --frame --mixed

(lldb) di -f -m

n/a

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

(lldb) disassemble --frame --bytes

(lldb) di -f -b

n/a

Disassemble the current source line for the current frame.

(lldb) disassemble --line

(lldb) di -l

n/a

EXECUTABLE AND SHARED LIBRARY QUERY COMMANDS


上一篇: 03-研究 iOS | LLDB 的基本原理 [命令结构、查询命令、断点设置、流程控制、模块查询、内存读写、凿形插件]。

下一篇: LLDB 和 GDB 的比较