Delve调试器简单使用说明

Delve

简介

Delve是一个专门用来调试Go程序的工具(Go编程语言的调试器)
可调试Go语言程序
也可调试汇编程序

在Delve中加载程序

有两种方法可以将程序加载到Delve调试器中
1.当源代码尚未编译为二进制时,使用denbug参数

dlv debug

2.使用exec参数

go build hello.go
dlv exec ./helllo

Delve调试器的简单用法

  • 进入调试
dlv debug
  • 查看Deleve提供的调试命令列表
dlv help
  • 断点
    • 每个go程序的入口是main.main函数,可以用break在此设置一个断点
break main.main
  • 查看已经设置的所有断点
breakpoints
  • 查看全部包级变量
vars main
  • 让程序运行到下一个断点处
continue
  • 单步执行进入函数内部
next
  • 进入函数之后通过args和locals命令查看函数的参数和局部变量
args
locals
  • 组合使用break和continue命令,设置条件断点
    • 在循环内部设置条件断点,当循环变量i等于3时断点生效
break main.go:10
condition 2 i==3
  • 打印变量
print nums
  • 查看当前执行函数的栈帧信息
stack
  • 查看当前Goroutine相关的信息
goroutine
goroutines
  • 退出调试器
quit
  • 先进入main,再转到其他函数
    • 单步执行
next

移动到调用函数

step
  • 使用filename:linenumber(文件名:行号)设置断点
break function.go:5
  • 在栈帧之间移动,使用frame命令(在stack命令显示的栈帧中移动)
frame 0
frame 1
  • 逐步退出
setpout
  • 打印变量类型
whatis
  • 功能接近指令说明
    • next 跳转到下一行源码处
    • continue 运行到下一个断点处
    • step 单步执行程序
    • step-instruction 单步执行一条cpu指令

Deleve调试汇编程序

调试汇编程序时,我们需要时刻关注寄存器的状态
如果涉及函数调用或局部变量或参数,还需要重点关注栈寄存器SP的状态

  • 用disassemble反汇编命令查看函数对应的汇编代码
disassemble
  • 单步执行汇编指令命令
step-instruction
  • 查看全部寄存器状态
regs
  • 查看内存内的数据
(dlv)print *(*[5]byte)(uintptr(0x00000000010a4060))
[5]uint8 [72,101,108,108,111]

通过help查看支持的指令与指令含义

参考

dlv参考1
dlv参考1_en
Go语言高级编程-Delve调试器

posted @ 2021-09-16 19:00  biby  阅读(489)  评论(0编辑  收藏  举报