dlv

go

godbg 介绍

Start a new project, the debugger on linux platform for go. This project is inspired by dlv github地址 背景 没想到这个项目最终还是沦为为一个玩具。初次有这个想法是因为发现 gdb调试golang代码是可以进入runtime的指令,而dlv却不可以。例如像map这种的初始化 s := make(map[int]string, 20) 主要是dlv将runtime的代码都skip掉了,表示对golanger无需关心底层的逻辑,只需要关心自己编写的代码即可。 先看一下效果 实现 代码本身分为5个步骤,代码是在main.go 1. 获取生成含.debug可执行文件的路径 2. 编译创建可执行文件 3. 分析可执行文件里面的_zdebug的字段,以便后续调试使用 4. 执行可执行文件,并且ptrace

By chainhelen

dlv

dlv 源码阅读

一. 目录介绍 1._fixtures 这个文件夹下面主要放一些用于测试的应用程序源码 2.assets 存放了4个代表delve的图标 3.cmd 这个是server/client的命令行入口 主要从commands.go这个文件体现,主要使用spf13/cobra来做命令行工具(相信喜欢使用vim的人都应该听过spf13) 主要命令有debug、trace、attach等,但是这些命令核心都是在使用gobuild、execute,所以基本看这两个函数即可 gobuild 主要是对需要调试源码的进行编译 execute 主要是对已经编译好的二进制进行运行、attach,用于调试(已经运行的进程,就直接attach) 4.Documentation 主要放dlv的文档,另外关于cmd的文档都是通过script/gen-usage-docs.go生成的 就是说大部分都是cmd目录的help注释 5.service service入口是/service/rpccommon/server.go,主要是由cmd来调用server的Run()、Close(

By chainhelen