Golang /Go调试工具delve

安装

这里提供了支持的所有平台(操作系统)上安装Delve的说明。 请注意您必须安装Go 1.5或更高版本。 此外如果使用Go 1.5,您必须设置GO15VENDOREXPERIMENT = 1,然后再尝试安装。

  • OSX
    在OSX上插入
    请使用以下步骤在OSX上构建和安装Delve
    Via Homebrew
    如果你安装了HomeBrew,只需运行:

    $ brew install go-delve/delve/delve

手动安装

0) 必备条件
确保您具有正确的编译工具链。
这应该是简单的:

xcode-select --install

1)创建自签名证书
你必须创建自签名证书,并使用它签署二进制文件:

  1. 打开应用程序“钥匙串访问”(/ Applications / Utilities / Keychain Access.app)
  2. 打开菜单 /Keychain Access/Certificate Assistant/Create a Certificate...
  3. 选择一个名称(在示例中为dlv-cert),将“Identity Type(身份类型)”设置为“Self Signed Root(自签名根)”,将“Certificate Type(证书类型)”设置为“Code Signing(代码签名)”,然后选择“Let me override defaults(让我覆盖默认值)”。 单击“Continue(继续)”。 您可能想将预定义的365天期间延长到3650天。
  4. 单击“Continue(继续)”多次,直到进入“Specify a Location For The Certificate(指定证书的位置)”页面,然后将“Keychain to System(钥匙串设置为系统)”。
  5. 如果您不能将证书存储在“System(系统)”钥匙扣中,请在“login(登录)”钥匙扣中创建,然后将其导出。 然后,您可以将其导入到“System(系统)”钥匙扣。
  6. 在钥匙串中选择“系统”,你应该找到你的新证书。 使用证书的上下文菜单(不是公钥或私钥),选择“获取信息”,打开“信任”项,并将“代码签名”设置为“始终信任”。
  7. [至少在Yosemite上:]在钥匙串中选择类别Keys - > dlv-cert - >右键单击 - > GetInfo - >Access Control (访问控制) - >选择“允许所有应用程序访问此项目” - >保存更改。
  8. 您必须退出“钥匙串访问”应用程序,才能使用证书并通过终止当前运行的“任务门”进程重新启动“任务门”服务。 或者,您可以重新启动计算机。
    2)二进制安装
    1. 在写go程序的时候首先创建文件夹$GOPATH/src/github.com/derekparker 并且cd 到c$GOPATH/src/github.com/derekparker目录下
    2. clone 这个项目:git clone https://github.com/derekparker/delve.git 并且cd delve

注意:如果您使用Go 1.5必须先设置GO15VENDOREXPERIMENT = 1,然后才能继续安装。
GO15VENDOREXPERIMENT env var只是选择进入Go 1.5 Vendor Experiment。(1.6不需要)

所有make命令都假设一个CERT环境变量,其中包含上面创建的证书的名称。 Makefile还假定GOPATH是单值的,不是冒号分隔的。 makefile只需要帮助促进构建和代码签名的过程。

  • 运行以下命令:CERT = dlv-cert make install,它将安装二进制文件并对其进行编码。
    有关更多信息,请参阅此安装视频https://www.youtube.com/watch?v=4ndjybtBg74
    说明
    在构建期间取消代码签名授权提示
    如果在使用自签名证书运行make时提示您授权,请尝试以下操作:
    • 打开应用程序“钥匙串访问”(/ Applications / Utilities / Keychain Access.app)
    • 双击与您的自签名证书(示例中的dlv-cert)对应的私钥
    • 选择“Access Control(访问控制)”选项卡
    • 单击“始终允许这些应用程序访问”下的[+],然后从Finder对话框中选择/ usr / bin / codesign
    • 点击“(Save changes)保存更改”按钮
    • 消除“Developer tools access(开发工具访问)”提示运行delve

如果运行dlv时出现此提示:

"Developer tools access needs to take control of another process for debugging to continue. Type your password to allow this"

尝试运行DevToolsSecurity -enable以消除提示。 有关更多信息,请参阅man DevToolsSecurity。

  • Linux
    请使用以下步骤在Linux上构建和安装Delve
    在Linux上有两种安装方式。 首先是标准的go get方法:

    go get github.com/derekparker/delve/cmd/dlv

或者,您可以克隆repo并运行:

$ make install

注意:如果您使用Go 1.5必须先设置GO15VENDOREXPERIMENT = 1,然后才能继续安装。 GO15VENDOREXPERIMENT env var只是选择进入Go 1.5 Vendor Experiment

  • Windows
    请使用标准的go get命令在Windows上构建和安装Delve

    go get github.com/derekparker/delve/cmd/dlv

注意:如果您使用Go 1.5必须先设置GO15VENDOREXPERIMENT = 1,然后才能继续安装。 GO15VENDOREXPERIMENT env var只是选择进入Go 1.5 Vendor Experiment

用法

您可以多种方式调用Delve,具体取决于您的使用需求。 Delve使每个尝试都是用户友好的,确保用户必须做最少的工作可能开始调试他们的程序。

请参阅主要使用文档以进一步探索命令。

命令行界面

命令

命令 描述
args 打印函数参数
break 设置一个断点
breakpoints 打印激活的断点信息
clear 删除断点
clearall 删除所有的断点
condition 设置断点条件
continue 运行到断点或程序终止
disassemble 拆解器
exit 退出debugger
frame 在不同的框架上执行的命令
funcs 打印函数列表
goroutine 显示或更改当前goroutine
goroutines 列出程序的全部goroutines
help 打印出帮助信息
list 显示源代码
locals 打印局部变量
next 跳到下一行
on 在遇到断点时执行一个命令
print 评估表达式
regs 打印CPU寄存器的内容
restart 重启进程
set 更改变量的值
source 执行包含delve命令列表的文件
sources 打印源文件列表
stack 打印堆栈跟踪
step 单步执行程序
step-instruction 单步单个执行cpu指令
thread 切换到指定的线程
threads 打印每一个跟踪线程的信息
trace 设置跟踪点
types 打印类型列表
vars 打印某个包内的(全局)变量

API

API文档

Delve公开了主要可以与Delve编程交互的IDEs和编辑器的一个API接口,以便这些程序使用。 API由终端使用,因此无论新功能如何,都将始终保持最新的锁定状态。

使用

为了在“API模式”中运行Delve,只需使用标准命令之一调用,提供--headless标志,如下所示:

$ dlv debug --headless --api-version=2 --log --listen=127.0.0.1:8181

这将以非交互模式启动调试器,侦听指定的地址,并启用日志记录。 当然最后两个标志(log listen)是可选的。
或者如果您要将多个客户端连接到API,也可以指定--accept-multi客户端标志。
您可以使用connect子命令从Delve本身连接headless调试器:

$ dlv connect 127.0.0.1:8181

这对于远程调试很有用。

API 接口

Delve已经可以允许多个客户端/服务器这种方式的架构。因为所有的“业务逻辑”被抽象出实际的客户端/服务器实现,所有允许容易实现新的API接口。

当前API接口

JSON-RPC

内部文件

TODO(derek parker)

将要做的

这个目录将包含调试器内部和它如何工作的文档。

编辑器集成

可以使用以下用于delve编辑器的插件:
1. Golang Plugin for IntelliJ IDEAhttps://github.com/go-lang-plugin-org/go-lang-idea-plugin)
2. Go for Visual Studio Code (https://github.com/Microsoft/vscode-go#go-for-visual-studio-code)
3. Emacs plugin https://github.com/benma/go-dlv.el/
4. LiteIDE https://github.com/visualfc/liteide
5. Go Debugger for Atom
go-debug
atom 使用delve 来调试代码

Golang /Go调试工具delve
demo.gif


安装
可以使用apm install go-debug或在设置中搜索go-debug。
安装delve
查阅https://github.com/derekparker/delve/tree/master/Documentation/installation
绑定的快捷键

f5 运行当前包 (dlv debug)
ctrl-f5 测试运行当前包(dlv test)
shift-f5 重新启动当前的delve会话(r / restart)
f6 停止delve (exit / quit / q)
f8 继续执行 (c / continue)
f9 切换断点
f10 到下一个断电源(n / next)
f11 进入函数 (s / step)
cmd-k cmd-g (mac) / ctrl-k ctrl-g (others) 切换主面板

链接
关于slack的golang社区:Gopher Slack| go-plus
问题?请直接在go-plus频道给我发送消息

已知bugs

  • 当一个函数定义两个(或多个)同名的变量时,delve无法区分它们:locals将打印这两个变量,print将随机选择一个。 参见问题Issue#106
  • Delve目前不支持32位系统。 这通常表现为proc / disasm.go中的编译器错误。 参见问题Issue#20
  • 当Delve使用go之前的版本1.7.0编译时,不能使用Receiver.Method Name语法在远程包中的函数上设置断点。 参见问题Issue#528
上一篇:关于禁止开发者调用console


下一篇:手写spring+springmvc+mybatis框架篇