VSCode Golang dlv调试数据截断问题及处理方法

 更新时间:2020-08-17 13:15:20   作者:佚名   我要评论(0)

使用VSCode对Golang程序进行调试时会遇到数据截断问题,string只显示前64个字符,array只显示前64个数据。经查dlv是支持以参数方式来控制的。
发现VSCode的Golang插

使用VSCode对Golang程序进行调试时会遇到数据截断问题,string只显示前64个字符,array只显示前64个数据。经查dlv是支持以参数方式来控制的。

发现VSCode的Golang插件里面有个叫做go.delveConfig果博东方的配置,是可以设置dlv参数的。分享一下我的整个Golang配置:

"go.buildOnSave": "off",
  "go.formatTool": "goimports",
  "go.lintTool": "golangci-lint", //go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
  "go.autocompleteUnimportedPackages": true,
  "go.gotoSymbol.includeImports": true,
  "go.useLanguageServer": true,
  "go.delveConfig": {
    "dlvLoadConfig": {
      "followPointers": true,
      "maxVariableRecurse": 3,
      "maxStringLen": 1024,
      "maxArrayValues": 1024,
      "maxStructFields": -1
    },
  },
  "[go]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.organizeImports": true
    }
  },

需要改的主要是maxStringLenmaxArrayValuesmaxVariableRecurse这三个字段。

果博东方参考:http://stackoverflow.com/questions/52416263/how-do-i-print-the-full-value-of-a-string-variable-in-delve

ps:下面看下Golang dlv 工具debug 调试注意项

果博东方总结一下关于Go 的调试工具dlv:http://github.com/derekparker/delve 的使用注意项。

安装:

go get -u github.com/go-delve/delve/cmd/dlv

配置:

以Centos为例

export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

使用

以某go服务为例:

  • dlv debug xxx.go 指定需要debug的文件
  • 进入dlv交互式窗口后,b <filename>:<line> 指定断点
  • r arg 指定运行参数
  • n 执行一行
  • c 运行至断点或程序结束
dlv debug /home/xxx/server.go
(dlv) b /home/xxx/server.go:258
(dlv) r 1
(dlv) n
(dlv) c

注意: b <filename>:<line>果博东方 指定断点时,若该行号对应的代码内容为无具体语义的代码(括号、注释等),则会报错:

果博东方Command failed: could not find /home/xxx/server.go:258

果博东方此时可用list 命令先查看上下文代码,避免将无具体语义的代码设为断点。

命令集

The following commands are available:
    args ------------------------ Print function arguments.
    break (alias: b) ------------ Sets a breakpoint.
    breakpoints (alias: bp) ----- Print out info for active breakpoints.
    call ------------------------ Resumes process, injecting a function call (EXPERIMENTAL!!!)
    clear ----------------------- Deletes breakpoint.
    clearall -------------------- Deletes multiple breakpoints.
    condition (alias: cond) ----- Set breakpoint condition.
    config ---------------------- Changes configuration parameters.
    continue (alias: c) --------- Run until breakpoint or program termination.
    deferred -------------------- Executes command in the context of a deferred call.
    disassemble (alias: disass) - Disassembler.
    down ------------------------ Move the current frame down.
    edit (alias: ed) ------------ Open where you are in $DELVE_EDITOR or $EDITOR
    exit (alias: quit | q) ------ Exit the debugger.
    frame ----------------------- Set the current frame, or execute command on a different frame.
    funcs ----------------------- Print list of functions.
    goroutine ------------------- Shows or changes current goroutine
    goroutines ------------------ List program goroutines.
    help (alias: h) ------------- Prints the help message.
    list (alias: ls | l) -------- Show source code.
    locals ---------------------- Print local variables.
    next (alias: n) ------------- Step over to next source line.
    on -------------------------- Executes a command when a breakpoint is hit.
    print (alias: p) ------------ Evaluate an expression.
    regs ------------------------ Print contents of CPU registers.
    restart (alias: r) ---------- Restart process.
    set ------------------------- Changes the value of a variable.
    source ---------------------- Executes a file containing a list of delve commands
    sources --------------------- Print list of source files.
    stack (alias: bt) ----------- Print stack trace.
    step (alias: s) ------------- Single step through program.
    step-instruction (alias: si)  Single step a single cpu instruction.
    stepout --------------------- Step out of the current function.
    thread (alias: tr) ---------- Switch to the specified thread.
    threads --------------------- Print out info for every traced thread.
    trace (alias: t) ------------ Set tracepoint.
    types ----------------------- Print list of types
    up -------------------------- Move the current frame up.
    vars ------------------------ Print package variables.
    whatis ---------------------- Prints type of an expression.

总结

到此这篇关于VSCode Golang dlv调试数据截断问题及处理方法的文章就介绍到这了,更多相关VSCode Golang dlv调试数据截断内容请搜索脚本之家以前的文章或继续浏览下面的果博东方相关的文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

  • VSCode1.4 搭建Golang的开发调试环境(遇到很多问题)
  • 解决vscode中golang插件依赖安装失败问题

果博东方相关的文章

  • VSCode Golang dlv调试数据截断问题及处理方法

    VSCode Golang dlv调试数据截断问题及处理方法

    使用VSCode对Golang程序进行调试时会遇到数据截断问题,string只显示前64个字符,array只显示前64个数据。经查dlv是支持以参数方式来控制的。 发现VSCode的Golang插
    2020-08-17
  • Golang 限流器的使用和实现示例

    Golang 限流器的使用和实现示例

    限流器是服务中非常重要的一个组件,在网关设计、微服务、以及普通的后台应用中都比较常见。它可以限制访问服务的频次和速率,防止服务过载,被刷爆。 限流器的算法
    2020-08-17
  • Golang 变量申明的三种方式

    Golang 变量申明的三种方式

    Golang 申明变量主要有三种方式: 一是使用 var 关键字,申明包级或函数级变量; 二是使用短变量申明方式,只能申明函数级变量,且需指明变量值; 三是使用
    2020-08-17
  • wind10 idea中 go 开发环境搭建教程图解

    wind10 idea中 go 开发环境搭建教程图解

    1.下载安装包: 国内的: http://studygolang.com/ 这里使用的的是第一种http://studygolang.com/ 下载后解压到本地 目录结构: 配置环境变量 path中配置到bi
    2020-08-17
  • touch shell脚本并修改为777权限的方法

    touch shell脚本并修改为777权限的方法

    mksh.sh #!/bin/bash for i in "$@" do touch ${i} chmod 777 ${i} echo "#!/bin/bash">${i} done mkcpptest.sh #!/bin/bash for i in "$@" do
    2020-08-17
  • 浅谈Shell 流程控制

    浅谈Shell 流程控制

    和Java、PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <&#63;php if (isset($_GET["q"])) { search(q); } else { // 不做任何事情 }
    2020-08-17
  • 3000字扫盲shell基础知识(新手必备)

    3000字扫盲shell基础知识(新手必备)

    不论前端还是后端,再学会Linux的基础上,还应该学会写一些简单的Shell。不止是工作,日常中想做一些东西,如果手动做就很累人也费时间,如果你会用Shell脚本处理就
    2020-08-17
  • 使用Go基于WebSocket构建千万级视频直播弹幕系统的代码详解

    使用Go基于WebSocket构建千万级视频直播弹幕系统的代码详解

    (1)业务复杂度介绍 开门见山,假设一个直播间同时500W人在线,那么1秒钟1000条弹幕,那么弹幕系统的推送频率就是: 500W * 1000条/秒=50亿条/秒 ,想想B站2019跨年
    2020-08-17
  • Go 语言中关于接口的三个

    Go 语言中关于接口的三个

    我的在线博客:http://golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 1. 对方法的调用限制 接口是一组固定的方法集,由于静态类型的限制,接
    2020-08-17
  • Go 语言json.Unmarshal 遇到的小问题(推荐)

    Go 语言json.Unmarshal 遇到的小问题(推荐)

    1.问题现象描述 使用 json.Unmarshal(),反序列化时,出现了科学计数法,参考代码如下: jsonStr := `{"number":1234567}` result := make(map[string]interface{
    2020-08-17

最新评论

洪都拉斯亚拉巴马州枪击案张大奕晒婚纱照1万亿特别国债肖战回应近期争议阿娇赖弘国离婚美国确诊超186万