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

LLDB 和 GDB 的比较

最编程 2024-03-01 22:31:44
...
GDB LLDB
List the threads in your program.
(gdb) info threads (lldb) thread list
Select thread 1 as the default thread for subsequent commands.
(gdb) thread 1 (lldb) thread select 1
(lldb) t 1
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 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.
(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 as binary.
(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 as text.
(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 named main.
(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