原文地址:https://github.com/derekparker/delve/tree/master/Documentation
安装
这里提供了支持的所有平台(操作系统)上安装Delve的说明。 请注意您必须安装Go 1.5或更高版本。 此外如果使用Go 1.5,您必须设置GO15VENDOREXPERIMENT = 1,然后再尝试安装。
- OSX
在OSX上插入
请使用以下步骤在OSX上构建和安装DelveVia Homebrew
如果你安装了HomeBrew,只需运行:$ brew install go-delve/delve/delve
手动安装
0) 必备条件
确保您具有正确的编译工具链。
这应该是简单的:
xcode-select --install
1)创建自签名证书
你必须创建自签名证书,并使用它签署二进制文件:
- 打开应用程序“钥匙串访问”(/ Applications / Utilities / Keychain Access.app)
- 打开菜单 /Keychain Access/Certificate Assistant/Create a Certificate...
- 选择一个名称(在示例中为dlv-cert),将“Identity Type(身份类型)”设置为“Self Signed Root(自签名根)”,将“Certificate Type(证书类型)”设置为“Code Signing(代码签名)”,然后选择“Let me override defaults(让我覆盖默认值)”。 单击“Continue(继续)”。 您可能想将预定义的365天期间延长到3650天。
- 单击“Continue(继续)”多次,直到进入“Specify a Location For The Certificate(指定证书的位置)”页面,然后将“Keychain to System(钥匙串设置为系统)”。
- 如果您不能将证书存储在“System(系统)”钥匙扣中,请在“login(登录)”钥匙扣中创建,然后将其导出。 然后,您可以将其导入到“System(系统)”钥匙扣。
- 在钥匙串中选择“系统”,你应该找到你的新证书。 使用证书的上下文菜单(不是公钥或私钥),选择“获取信息”,打开“信任”项,并将“代码签名”设置为“始终信任”。
- [至少在Yosemite上:]在钥匙串中选择类别Keys - > dlv-cert - >右键单击 - > GetInfo - >Access Control (访问控制) - >选择“允许所有应用程序访问此项目” - >保存更改。
- 您必须退出“钥匙串访问”应用程序,才能使用证书并通过终止当前运行的“任务门”进程重新启动“任务门”服务。 或者,您可以重新启动计算机。
2)二进制安装 - 在写go程序的时候首先创建文件夹$GOPATH/src/github.com/derekparker 并且cd 到c$GOPATH/src/github.com/derekparker目录下
- 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上构建和安装Delvego 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 IDEA (https://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 来调试代码
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。