美文网首页Golanggo学习Golang
Golang /Go调试工具delve

Golang /Go调试工具delve

作者: hehe_Android | 来源:发表于2016-11-04 17:58 被阅读8464次

    原文地址:https://github.com/derekparker/delve/tree/master/Documentation

    安装

    这里提供了支持的所有平台(操作系统)上安装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)二进制安装
    9. 在写go程序的时候首先创建文件夹$GOPATH/src/github.com/derekparker 并且cd 到c$GOPATH/src/github.com/derekparker目录下
    10. 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只需要帮助促进构建和代码签名的过程。

    说明

    在构建期间取消代码签名授权提示
    如果在使用自签名证书运行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 来调试代码

    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

    相关文章

      网友评论

      本文标题:Golang /Go调试工具delve

      本文链接:https://www.haomeiwen.com/subject/kjwmuttx.html