[效率大杀器] go工具篇:dlv + goland 实现远程调试
提升开发效率的关键利器:在Goland中利用dlv实现远程调试功能远程调试是一种强大的技术,它允许你在本地的集成开发环境(IDE)中对远程服务器上的服务进行调试。通过在本地设置断点,你可以调用服务接口,程序会在断点处暂停,便于你深入检查和理解远程服务的运行情况。这种方法的一大优点是保持开发环境的统一性,无需在服务器上进行复杂的配置,简化了调试流程。首先,让我们来安装必不可少的dlv工具。你可以从GitHub仓库获取:github.com/derekparker/...。在Linux系统中,有多种安装方式,但这里需要注意的是,我尝试的某一种方法并未成功,可能需要在特定的项目目录下执行。我选择的方法是将仓库克隆到项目的根目录。安装完成后,验证dlv是否成功。如果一切顺利,你应该能看到相应的提示。然后,将dlv与Goland结合起来使用。请注意,当使用dlv运行的服务时,只能通过执行kill命令来停止服务,这是它的常规退出方式
使用dlv排查Golang程序线上问题的过程及使用记录
最近线上有个服务突然卡死了,看起来是进程启动了,但是请求接口则反应连接不上,看错误日志也没有什么异常信息,对于这种线上服务卡死的问题,一直没有丰富经验来排查。我先是用 strace -p pid 来看问题,发现有时候又处于wait futex,有时候有正常的刷刷刷一大堆信息。按照我之前的经验,出现wait futex,一般是等待channel出现,如果一直处于wait futex,则说明进程卡死在某个channel上了。但是现在这个卡死的进程并没有一直处于wait futex,说明可能不是卡死在某个channel上,至少还有其他goroutine在正常活动中。进程没有卡死在wait futex,但是又不能监听端口处理请求,说明要么是在启动阶段,还未到监听端口这一步就出现死锁卡死了,要么就是监听端口的那部分代码出问题了。以前我只用过strace -p 来判断是否死锁了,更早之前还试过用gdb调试python服务,但是go的服务,该用什么工具,还不太了解,理论上用strace和gdb也能排查到一些问题的,但是这两个工具都无法识别goroutine,调试起来很难
go语言调试器有哪些官网
可以去DELVE官网进行下载。关于delve工具的介绍,这里简单给大家介绍一下。delve在go项目及应用的开发中可以用来追踪程序中的异常代码,也可以通过打日志的方式追查问题,但是更重要也是非常厉害的一点,就是delve可以直接分析程序执行的情况。这一点在后期或线上的问题排查中无疑是提供了一个非常大的便捷。Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础。采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输