专栏首页网络小说作家的编程技术沉思录JetBrains GoLand 以debug运行Go程序时出现could not launch process: decoding dwarf section info at offset 0x0:

JetBrains GoLand 以debug运行Go程序时出现could not launch process: decoding dwarf section info at offset 0x0:

这是一篇写给刚开始学习Go语言而在搭建环境可能遇到问题的小萌新的文,大神请自行绕路哈(0-0)

有天,我把Go运用环境升到最新版1.16后,用以前一直在用的JetBrains GoLand 2017.3.3 x64版本运行了搭建的gin框架项目时,使用debug模式后,启动就出现了这样一条异常信息:could not launch process: decoding dwarf section info at offset 0x0: too short——

奇怪的是,run模式运行就正常,当时我第一感觉是,可能是debug插件有问题。

后来百度一番后,发现这确实是Go版本过新而JetBrains GoLand的debug插件版本过老的原因,原本想试试换新一版JetBrains GoLand,但想了一下,这一个小问题,是否可以更快捷地解决呢?若能快捷解决的话,也比再去找一款破解版的新款JetBrains GoLand安装方便。

网上很多方案,但也不知道哪种有用,在试错了多次后,发现其中一种是真的有用。

故而想把我的操作过程详细记录下来,希望可以帮助其他在使用JetBrains GoLand学习Go出现debug异常的小伙伴。

这一个debug错误,应属于Delve调试插件已经过老原因,无法适配新版的Go运用环境。

那么,Delve工具是什么呢?

开源软件库是这样介绍的:Delve 是一个 Go 语言的调试器,目标是给 Go 提供一个简单和特性齐全的调试工具,并且是容易调用和使用的。

简而言之,当JetBrains GoLand使用debug时,其实就是使用到了Delve的debug命令。

你可以在JetBrains GoLand使用dlv --help,就会出现其具备的命令功能,其中的debug命令就是我们要用到的——

既然如此,若是dlv(Delve 简写)版本过低的原因,那好办,不妨先升级一下div。

一、下载div新版本

执行go get -u github.com/derekparker/delve/cmd/dlv

这时候,可能会出现 RPC failed; curl 28 OpenSSL SSL_read: Connection was reset, errno 10054,这是远程从GitHub上拉去的dlv文件超过本地设置下载文件大小限制的原因,故而把本地git下载限制调大即可,例如:git config --global http.postBuffer 624288000。

再执行上面的go get -u github.com/derekparker/delve/cmd/dlv,就可以正常更新了,执行成功后,进入到你的GOPATH目录下,就可以看到多了一个bin目录,且目录底下有一个dlv.exe文件,即证明新版本Delve 下载完成。

至于GOPATH目录在哪里,其实在下载Go的运行环境时,它会自动在电脑系统环境变量里帮你设置,例如,我的是在——

二、替换JetBrains GoLand编译器的本地div工具路径

设置文件所在路径:Help->Edit Custom Properties

进入到Edit Custom Properties后,设置新div的配置如下:

dlv.path=C:/Users/Administrator/go/bin/dlv

其中,C:/Users/Administrator/go是你的系统环境变量里的%GOPATH%对应路径,我这里用到了绝对路径,不知道直接用dlv.path=%GOPATH%/bin/dlv可否也行,暂时没有进一步尝试,感兴趣的小伙伴可自行验证。

设置完的配置如下:

完成这一步后,需要重启一下JetBrains GoLand,选择路径File->Invalidate Caches /Restart

等待重启完成,就可以打一个断点,试一下debug是否可行了,经验证,已可以正常进行debug运行,接下来就可以愉快地啪~敲Go语言代码了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go语言之旅:准备开发工具及HelloWorld

    在开发Golang应用的时候,我们首先遇到的问题是使用什么工具来开发,对Golang语言支持最好的应该是Goland,但是它收费,当然它也有一些免费策略,如果有...

    杨子翔 josonyang
  • 从Go的二进制文件中获取其依赖的模块信息

    我们用 Go 构建的二进制文件中默认包含了很多有用的信息。例如,可以获取构建用的 Go 版本:

    Jintao Zhang
  • GDB实现原理和使用范例

    这篇文章为了让你深入了解gdb的工作原理,以及如何在linux环境下使用强大的gdb调试程序功能。

    mariolu
  • 用GCC开发STM32,正点原子开发板的一个库函数版本例程示例

    首先下载交叉编译环境GCC,这个网上有很多,百度一下就能找到下载。比如 Sourcery G++ for ARM EABI

    独行猫A
  • 芯链第1课 如何在Ubuntu64位系统下搭建HPB开发环境

    本文详细讲解如何在Ubuntu 64位虚拟机上搭建HPB开发环境,并给出了遇到的各种问题的解决方法。主要包括: (1)下载HPB版本并编译; (2)创建账号...

    辉哥
  • Oracle 19c RAC打补丁过程避坑指南

    导读:记录19.3 rac 打补丁过程中遇到的一些问题19.3升19.5、19.5升19.6。

    数据和云
  • 终于跑通分布式事务框架tcc-transaction的示例项目

    前段时间在看项目代码的时候,发现有些接口的流程比较长,在各个服务里面都有通过数据库事务保证数据的一致性,但是在上游的controller层并没有对一致性做保证。

    JackieZheng
  • 使用 gdb 调试多进程程序 —— 以调试 nginx 为例

    这里我们说的多进程程序指的是一个进程使用 Linux 系统调用 fork() 函数产生的子进程,没有相互关联的进程就是普通的 gdb 调试,不必刻意讨论。

    范蠡
  • K8s远程调试,你的姿势对了吗?

    ? 前言 本文讲述k8s各个系统组件如何进行远程调试, 适用于所有mac、windows以及不方便在本地进行调试的技术宅; 像k8s代码量如此庞大的系统, 调...

    腾讯云TStack
  • Android逆向分析大全

    Android程序的特点相比在于使用混淆方式打包,将包名、类名、函数名改成不易看懂的字母,从而使生成的apk小很多(android studio提供了relea...

    悲伤的夏洛特@席玉铎666
  • dotnet core 在 MAC 系统下删除应用程序自己后调 Process Start 方法将会抛出 Win32 异常

    在 MAC 系统下,如果在运行过程中,应用程序的文件被删除了,那么此时如果应用程序执行了 Process.Start 方法时,将会抛出 Win32Excepti...

    林德熙
  • 认识目标文件结构

    目标文件是源代码编译但未链接的中间文件(Windows的.obj和Linux的.o),Windows的.obj采用 PE 格式,Linux 采用 ELF 格式,...

    Dabelv
  • Apple 操作系统可执行文件 Mach-O

    Mach-O 的全称是 Mach Object File Format。可以是可执行文件,目标代码或共享库,动态库。Mach 内核的操作系统比如 macOS,i...

    用户7451029
  • 【实践】WINDOWS下GOlang性能测试分析工具PProf&GO torch入门指导

    本文讲解在Windows 10操作系统VS Code集成环境下,如何使用GO语言的PProf工具进行性能分析和查看的基本操作,同时也介绍火焰图呈现GO torc...

    辉哥
  • 扒一扒ELF文件

      在介绍ELF文件之前,我们先看下,一个.c程序是如何变成可执行目标文件的。下面举个例子。

    嵌入式与Linux那些事
  • Supervisor-让你的程序监控管理更得心应手

    Supervisor是一个客户机/服务器系统(也就是非常经典的C/S结构),它允许用户在类UNIX操作系统上控制许多进程。

    PayneWu
  • windows 为什么驱动模块加载后可以删除而应用模块不可以

    MmFlushImageSection,如果返回True,则可以删除,该函数在WRK中的说明是

    kkindof
  • 一次kvm上kernel crash分析记录

    为什么cpu在内核收包时突然发生了异常,异常号是14,执行async_page_fault处理异常,处理异常时发现发现cr2中地址处于内核空间中,内核是不会发生...

    惠伟
  • nox&CSAW部分pwn题解

    暑假的时候遇到了一群一起学习安全的小伙伴,在他们的诱劝下,开始接触国外的CTF比赛,作为最菜的pwn选手就试着先打两场比赛试试水,结果发现国外比赛真有意思哎嘿。

    安恒网络空间安全讲武堂

扫码关注云+社区

领取腾讯云代金券