lldb、GDB 常用的小技巧。

安装

# 不知道的名字的情况下,可以先搜索
$ apt-cache search lldb

# 常用用具
$ sudo apt install gcc
$ sudo apt install gdb

$ sudo apt install llvm
$ sudo apt install lldb

一开始,都是使用 lldb 来进行调试的,但在老的 80386 系统上,lldb 有些兼容和适配问题,具体可以参考 https://www.mail-archive.com/lldb-dev@lists.llvm.org/msg08245.html 所以,如果是 i386 的话,推荐使用 gdb 来进行调试。

LLDB 调试技巧

参考

# 编译代码
$ gcc main.c

# 调试程序
$ lldb a.out

# 设置断点 setbreakpoint
(lldb) b main

# 根据地址设置断点
(lldb) b 0x001

# 启动断点
(lldb) process launch --stop-at-entry

# 运行
(lldb) r
# 下一步 next
(lldb) n
# 或使用 step-over 命令
# (lldb) thread step-over

# 回车下一步,回车是重复执行上一个命令
(lldb) [ENTER]


# 读取内存信息
(lldb) x $rbp

# 读取寄存器信息
(lldb) re r

# 或制定读取
# (lldb) register read $rbp

# 读取所有寄存器
(lldb) re r -a

# 读取内存
(lldb) x 0x001

# 退出 lldb
(lldb) exit

GDB

$ gdb ./a.out

# 查看汇编
# https://stackoverflow.com/questions/1902901/show-current-assembly-instruction-in-gdb
(gdb) layout asm

# 开始即断点
# https://stackoverflow.com/questions/10483544/stopping-at-the-first-machine-code-instruction-in-gdb
(gdb) starti

# step in
(gdb) si

# 汇编下一步
(gdb) si

# 查看寄存器
(gdb) info registers

# 查看内存
(gdb) x/16x 0x804a00e

# 退出
(gdb) quit

lldb vs gdb

https://lldb.llvm.org/use/map.html

其他 CLI

  • 查看二进制格式 nm ./a.out
  • 查看汇编代码 objdump -S ./a.out

修改文件

# 删除所有行
:%d

参考

  • https://www.nesono.com/sites/default/files/lldb%20cheat%20sheet.pdf
  • https://lldb.llvm.org/use/tutorial.html