启动调试

  • 启动进程——不带参数
(lldb) process launch
(lldb) run
(lldb) r
  • 启动进程——带参数
(lldb) process launch -- <args>
(lldb) run <args>
(lldb) r <args>
  • 启动进程——通过将参数传递给调试器
% lldb -- a.out 1 2 3
  • 启动进程——启动前通过调试器设置参数
(lldb) settings set target.run-args 1 2 3
(lldb) run
  • 设置环境变量
(lldb) settings set target.env-vars DEBUG=1
(lldb) set se target.env-vars DEBUG=1
(lldb) env DEBUG=1
  • 取消环境变量
(lldb) unset env DEBUG
  • 查看设置的参数
(lldb) settings show target.run-args
  • attach到进程——通过pid
(lldb) attach -p 123
  • attach到进程——通过进程名
(lldb) process attach --name a.out
  • 等待进程启动并attach
(lldb) process attach --name a.out --waitfor
  • attach到远端进程——gdb服务
(lldb) gdb-remote add:port
  • attach到本地进程——gdb服务,省略了地址
(lldb) gbd-remote port

调试指令

控制指令

  • 单步进入
(lldb) step
(lldb) s
  • 单步进入忽略指定的函数
(lldb) settings show target.process.thread.step-avoid-regexp
target.process.thread.step-avoid-regexp (regex) = ^std::
(lldb) settings set target.process.thread.step-avoid-regexp ^std::|^abc
  • 单步跳过
(lldb) next
(lldb) n
  • 指令级别的单步进入
(lldb) si
  • 指令级别的单步跳过
(lldb) ni
  • 跳出当前栈
(lldb) finish
  • 立即从当前栈返回——并且可以带有一个可选的返回值
(lldb) thread return <返回>
  • 运行到指定行或者离开当前函数
(lldb) thread until 12
  • 查看当前frame和源码行
(lldb) f

断点命令

  • 给函数打断点
(lldb) b main
  • 给指定源码文件的指定行打断点
(lldb) b test.c:12
  • 设置条件断点
(lldb) br s -n foo -c '(int)strcmp(y,"hello") == 0'
  • 列出所有断点
(lldb) br l
  • 删除断点
(lldb) br del 1
  • 禁用断点
(lldb) br dis 1
  • 启用断点
(lldb) br en 1
  • 监听变量
(lldb) wa s v global_var
  • 监听地址——其实就是监听指针的值
(lldb) wa s e -- my_ptr
  • 设置条件监听
(lldb) watchpoint modify -c '(global==5)'
  • 列出所有的监听点
(lldb) watch l
  • 删除监听点
(lldb) watch del 1

变量查询

  • 查看当前frame的参数和局部变量
(lldb) fr v
  • 查看当前frame的局部变量,不包括参数
(lldb) fr v -a
  • 打印变量值
(lldb) p bar
  • 以16进制打印变量值
(lldb) fr v -f x bar