vscode linux 远程 go 调试环境

本贴最后更新于 857 天前,其中的信息可能已经时移世改

不建议用 vscode 开发 go 的大项目。
远程 linux 环境是 wsl2-ubuntu20,原理上基本是一致。
习惯用 vscdoe 工作区统一配置设置和插件,再写一个同一个通用的 task、launch 模板,但是每个项目(文件夹)的 task 和 lauch 单独配置(因为不同项目 args、参数、环境要单独设置)。

  1. 远程机器。配置 go env,国内的网络建议配置 GOPROXY="https://goproxy.cn/,direct",不然后续下载 go tools 和包很慢。
  2. vscode 远程连接机器,安装 go 官方插件。安装 go 工具(vscode 中 ctrl + shift + p 搜索 go install
  3. 工作区设置。
    "settings": { "go.inferGopath": false, // 用的是go mod(go>1.11),所以没有配置 "editor.tabSize": 4, "editor.insertSpaces": false, "go.docsTool": "godoc", // gopls下无影响 // "go.buildOnSave": "workspace", "editor.detectIndentation": false, "go.formatTool": "default", // gopls下不影响 "[go]": { "editor.insertSpaces": false, "editor.tabSize": 4, "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": true // 保存时自动import }, "editor.suggest.snippetsPreventQuickSuggestions": false }, "go.toolsManagement.checkForUpdates": "proxy", // 提示go或go tools的版本更新,我配置了goproxy "go.useLanguageServer": true, "go.languageServerFlags": [ "-rpc.trace", // for more detailed debug logging ], "gopls": { "ui.completion.usePlaceholders": false, // "usePlaceholders": true, // add parameter placeholders when completing a function "completeUnimported": true, // autocomplete unimported packages "deepCompletion": true, // enable deep completion }, "terminal.explorerKind": "integrated", },

目前 gopls 已经稳定了,内存占用差不多 300M 以内。

➜ procs gopls PID:▲ PPID │ User │ CPU VmRSS │ TCP │ Command │ │ [%] [bytes] │ │ 4439 4228 │ bingo │ 0.0 210.832M │ [] │ ${GOPATH}/bin/gopls -mode=stdio -rpc.trace
  1. 准备 task 和 launch 模板,参考了官方文档

    • task.json

      { "version": "2.0.0", "cwd": "${workspaceFolder}", "tasks": [ { // 最终的编译 "label": "linux : go build", "command": "go", "args": [ "build", "-o", "bin/${workspaceFolderBasename}", // 编译对应的目录 ], "group": { "kind": "build", } }, { // 调试的编译 "label": "linux : go build(debug)", "type": "shell", "command": "go", "args": [ "build", "-gcflags=all=-N -l", // -N 禁用优化 -l 禁用内联 "-o", "bin/__debug_${workspaceFolderBasename}", ], "group": "build", }, { "label": "linux : go test(debug)", "type": "shell", "command": "go", "args": [ "test", "-c", "-o", "bin/__test_${workspaceFolderBasename}", ], "group": "test", }, { // 远程终端内调试和相关的后面launch.json中要求一致 // 如果是root用户可以不用sudo "label": "dlv start", "type": "shell", "command": "sudo", "args": [ "dlv", "dap", "--listen=127.0.0.1:12345", "--log-dest=3", "--only-same-user=false" ], "group": "build" } ], }
    • launch.json

      Launch: fastDebug,使用用默认的调试控制台,缺点是不能输入,不过 F5 运行是非常的方便。剩下两个是当程序要模拟终端输入时,先 ctrl + shift +b 运行 task 中 dlv dap 服务器。
      对于已运行的 go 程序,可以用 attach 模式。

      { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 // 远程调试前必须先启动dlv // sudo dlv dap --listen=127.0.0.1:12345 --log-dest=3 --only-same-user=false "version": "0.2.0", "configurations": [ { "name": "goDebug", "type": "go", "debugAdapter": "dlv-dap", "preLaunchTask": "linux : go build(debug)", // 预先调用编译 "request": "launch", "mode": "exec", "asRoot": true, // 以root用户执行 "port": 12345, "host": "127.0.0.1", "program": "bin/__debug_${workspaceFolderBasename}", "cwd": "${workspaceFolder}", "env": { "GO111MODULE": "auto" // 使用go mod }, "args": [], }, { "name": "goTest", "type": "go", "debugAdapter": "dlv-dap", "request": "launch", "preLaunchTask": "linux : go test(debug)", // 语调调用编译 "mode": "exec", "asRoot": true, "port": 12345, "host": "127.0.0.1", "program": "bin/__test_${workspaceFolderBasename}", "cwd": "${workspaceFolder}", "env": { "GO111MODULE": "auto" }, "args": [], }, { "name": "fastDebug", "type": "go", "debugAdapter": "dlv-dap", "request": "launch", "mode": "debug", "asRoot": true, // 以root用户执行 "program": "${workspaceFolder}", "cwd": "${workspaceFolder}", "env": { "GO111MODULE": "auto" }, "args": [], } ] }
  2. 在 go 工作区中添加项目(文件夹),将 task 和 launch 模板拷贝到项目下的 .vscode 目录下,然后就是用 go mod init 初始化项目了。(go mod 相关的操作其实也可以考虑配置成 task)

  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1388 回帖 • 277 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 58 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 11 关注
  • 电影

    这是一个不能说的秘密。

    121 引用 • 605 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 101 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1706 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 541 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 4 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 22 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 519 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 35 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 159 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • danl
    150 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 65 回帖 • 444 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 174 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 7 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 211 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 651 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • sts
    2 引用 • 2 回帖 • 197 关注