首页 > 编程语言 >golang dlv程序调试

golang dlv程序调试

时间:2024-02-26 16:11:54浏览次数:32  
标签:-- 程序调试 golang version dlv go 断点 调试

安装dlv

执行go install 安装dlv

go install github.com/go-delve/delve/cmd/dlv@latest

执行 dlv version 查看是否安装成功

$ dlv version
Delve Debugger
Version: 1.22.0
Build: $Id: 61ecdbbe1b574f0dd7d7bad8b6a5d564cce981e9 $

断点调试

dlv有以下三种方式进行断点调试:

  1. dlv attach pid:对正在运行的进程直接进行调试(pid 为进程id);
  2. dlv debug:编译源文件并开始调试,这里应和 main 函数位于同一目录,或者指定完整的 main 函数路径
  3. dlv exec filename:从二进制文件启动调试

dlv常用调试命令:

命令 含义
b 设置断点
bp 打印正活动的断点信息
clear 删除断点
clearall 删除所有断点
c 运行直到断点处或程序终止
n 下一步,不会进入函数
s 下一步,会进入函数
so 跳出当前函数
args 查看函数参数
locals 查看所有局部变量
list 打印当前源代码
on 运行到某断点然后执行相应的命令,比如 on 2 list
bt 打印当前调用栈
exit 退出
goroutines (grs) 列出所有的 goroutines
goroutine (gr) 查看当前的 goroutine

goland 使用 dlv 进行断点调试

点击debug按钮进入调试

添加断点

注:有的goland编译器不能执行debug如下图,是因为goland自带的dlv版本过低,升级dlv的版本即可

或者去修改dlv的默认路径:

dlv + goland 实现远程调试

  1. 在目标服务器安装dlv
  2. 将本地项目打包成二进制文件并推送到目标服务器
go build -gcflags "all=-N -l" 关闭内联优化,编译生成调试符号
  1. 在目标服务器执行dlv命令
dlv --listen=127.0.0.1:1234 --headless=true --api-version=2 --check-go-version=false --only-same-user=false exec main
--listen 监听端口
--headless 无头模块,接受客户端连接
--api-version 无头模式设置为2
--only-same-user 是否多用户连接
  1. 在goland上设置远程debug

标签:--,程序调试,golang,version,dlv,go,断点,调试
From: https://www.cnblogs.com/xingzr/p/18033093

相关文章

  • golang文件和目录操作
    读取文件通过Read方法读取import( "fmt" "os")funcmain(){ /* 打开文件 */ //以只读的方式打开文件,返回一个文件指针类型的对象和error file,err:=os.Open("./test.txt") //文件打开操作完之后必须关闭文件流,可以使用defer延迟关闭 deferfile.Close()......
  • golang反射
    反射有时我们需要写一个函数,这个函数有能力统一处理各种值类型,而这些类型可能无法共享同一个接口,也可能布局未知,也有可能这个类型在我们设计函数时还不存在,这个时候我们就可以用到反射反射是指在程序运行期间对程序本身进行访问和修改的能力。正常情况程序在编译时,变量被转换......
  • golang 系统调用与阻塞处理
    所有在UNIX系统上运行的程序最终都会通过C系统调用来和内核打交道。用其他语言编写程序进行系统调用,方法不外乎两个:一是自己封装,二是依赖glibc、或者其他的运行库。Go语言选择了前者,把系统调用都封装到了syscall包。封装时也同样得通过汇编实现。当M一旦进入系统调用后,会......
  • golang io优化
    如果想兼顾开发效率,又能保证高并发,协程就是最好的选择。它可以在保持异步化运行机制的同时,用同步方式写代码(goroutine-per-connection),这在实现高并发的同时,缩短了开发周期,是高性能服务未来的发展方向。CPU和IO设备是不同的设备,能并行运行。合理调度程序,充分利用硬件,就能跑出......
  • golang性能优化
    性能优化流程理清待优化代码的常用逻辑与场景根据实际场景编写压测用例使用pprof或者火焰图等工具取得数据找到热点代码重点优化Profilingpprof是用于可视化和分析性能分析数据的工具。为什么pprof可以帮助我们分析Go程序性能呢?因为它可以采集程序运行时数据:比如说协程栈,这样服......
  • Golang Swag 注释
    常用的注释用法:@title:指定API的标题。@description:对API的简要描述。@version:API的版本号。@termsOfService:API的使用条款。@contact:API的联系方式,例如邮箱。@license:API的许可证信息。@host:API的主机名和端口号。@BasePath:API的基本路径。@S......
  • golang中协程&管道&锁
    进程和线程进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间。一个进程至少有5种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态,通......
  • golang中的接口(数据类型)
    golang中的接口Golang中的接口是一种抽象数据类型,Golang中接口定义了对象的行为规范,只定义规范不实现。接口中定义的规范由具体的对象来实现,通俗的讲接口就一个标准,它是对一个对象的行为和规范进行约定,约定实现接口的对象必须得按照接口的规范接口的定义在go中接口(int......
  • golang中的类型断言,解释.(float64)和.(string)
    在Go语言中,. 后跟括号中的类型名称(如 .(float64) 或 .(string))通常出现在类型断言(typeassertion)的上下文中。类型断言用于检查一个空接口(interface{})值是否包含特定的类型,如果是,则将其转换为该类型。类型断言的语法如下:value,ok:=x.(T)其中 x 是一个 interface{}......
  • Golang Gorm 的标签tag
    当使用GORM进行数据库模型映射时,可以使用多种标签来定义字段的行为。以下是一些常用的GORM标签:gorm:"primary_key":定义字段作为模型的主键。gorm:"column:<column_name>":指定字段在数据库表中的列名。gorm:"type:<data_type>":指定字段的数据库数据类型。gorm:"......