GDB 和 LLDB 通用命令
最编程
2024-03-01 22:05:23
...
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) | |
(gdb) jump *$pc+8 |
(lldb) register write pc $pc+8`` The LLDB command uses backticks to evaluate an expression and insert the scalar result. |
Show the general-purpose registers for the current thread formatted as signed decimal | |
— |
(lldb) register read --format i (lldb) re r -f i LLDB now supp orts the GDB shorthand format syntax, but no space is permitted after the command: (lldb) register read/d Note: LLDB tries to use the same format c haracters as printf(3) when possible. Type help format to see the full list of format specifiers. |
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 supp orts the GDB shorthand format syntax, but no space is permitted after the command: (lldb) register read/t rax (lldb) p/t $rax |
Read memory from address 0xbffff3c0 and show four 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 s horthand format syntax, but no space is permitted 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 that any command can inline a scalar expression result (as long as the target is stopped) using back ticks ( ) around any e xpression: (lldb) memory read --size s izeof(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/512b x -o/tmp/mem.txt 0xbffff3c0
|
Save binary memory data to a file starting at 0x1000 and ending at 0x2000
|
|
(gdb) dump memory /tmp/mem.bin 0x1000 0x2000 |
(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 | |
(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 | |
— |
(lldb) disassemble --frame --mixed (lldb) di -f -m
|
Disassemble the current function for the current frame and show the opcode bytes | |
— |
(lldb) disassemble --frame --bytes (lldb) di -f -b
|
Disassemble the current source line for the current frame | |
— |
(lldb) disassemble --line (lldb) di -l |
上一篇: 为 vscode 构建调试环境
下一篇: lldb 的别名别名函数