Go语言远程调试

这篇具有很好参考价值的文章主要介绍了Go语言远程调试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Go语言远程调试

1、安装dlv

# 安装dlv
$ go install github.com/go-delve/delve/cmd/dlv@latest

$ dlv version
Delve Debugger
Version: 1.20.1
Build: $Id: 96e65b6c615845d42e0e31d903f6475b0e4ece6e $

2、命令行远程调试

我们远程(Linux服务器)有如下代码:

[root@zsx src]# tree go-dlv/
go-dlv/
├── go.mod
└── main.go

0 directories, 2 files

main.go 文件的内容如下:

[root@zsx go-dlv]# cat main.go
package main

import "fmt"

func main(){
        fmt.Println("1")
        fmt.Println("2")
        fmt.Println("2")
        fmt.Println("4")
        fmt.Println("5")
        age := 10
        name := "tom"
        fmt.Println(age)
        fmt.Println(name)
        fmt.Println("6")
        fmt.Println("7")
        fmt.Println("8")
        fmt.Println("9")
        fmt.Println("10")
}

main.go 进行编译:

[root@zsx go-dlv]# go build -ldflags=-compressdwarf=false -gcflags=all="-N -l" -o main main.go
[root@zsx go-dlv]# ls
go.mod  main  main.go

远程使用 dlv 启动程序:

[root@zsx go-dlv]# dlv exec ./main --listen=:2345 --headless=true --api-version=2 --check-go-version=false --accept-multiclient
API server listening at: [::]:2345
2023-06-27T20:59:42+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)

# 可以是带命令行参数启动,在可执⾏程序后面带上--,再后面就是命令行参数
$ dlv --listen=:2345 --headless=true --api-version=2 --check-go-version=false --accept-multiclient exec ./main -- -s 123

在 windows 上进行远程连接:

C:\Users\zhangshixing>dlv connect 192.168.43.195:2345
Type 'help' for list of commands.
(dlv) b main.go:13
Breakpoint 1 set at 0x496956 for main.main() /home/zhangshixing/go_work_space/src/go-dlv/main.go:13
(dlv) c
> main.main() /home/zhangshixing/go_work_space/src/go-dlv/main.go:13 (hits goroutine(1):1 total:1) (PC: 0x496956)
(dlv) p age
10
(dlv) p name
"tom"
(dlv) c
Process 88442 has exited with status 0
(dlv) exit
Remote process has exited. Would you like to kill the headless instance? [Y/n] y

3、vscode远程调试

在远程(Linux服务器)代码目录下启动 dlv:

[root@zsx go-dlv]# dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient --check-go-version=false
API server listening at: [::]:2345
2023-06-27T21:33:33+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)

然后在 vscode 中配置远程调试:

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

删除 "remotePath": "${workspaceFolder}",这一行。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Connect to server",
            "type": "go",
            "request": "attach",
            "mode": "remote",
            "port": 2345,
            "host": "192.168.43.195"
        }
    ]
}

下面我们进行调试,在代码第13行下断点。

Go语言远程调试,golang,golang

点击调试:

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

查看远端服务器的执行情况:

[root@zsx go-dlv]# dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient --check-go-version=false
API server listening at: [::]:2345
2023-06-27T21:33:33+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
1
2
2
4
5

我们点击继续:

Go语言远程调试,golang,golang

再次查看远端服务器的执行情况:文章来源地址https://www.toymoban.com/news/detail-528389.html

[root@zsx go-dlv]# dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient --check-go-version=false
API server listening at: [::]:2345
2023-06-27T21:33:33+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
1
2
2
4
5
10
tom
6
7
8
9
10

4、golang远程调试

在远程(Linux服务器)代码目录下启动 dlv:

[root@zsx go-dlv]# dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient --check-go-version=false
API server listening at: [::]:2345
2023-06-27T21:58:25+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)

然后在 golang 中配置远程调试:

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

下面我们进行调试,在代码第13行下断点。

Go语言远程调试,golang,golang

点击调试:

Go语言远程调试,golang,golang

Go语言远程调试,golang,golang

查看远端服务器的执行情况:

[root@zsx go-dlv]# dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient --check-go-version=false
API server listening at: [::]:2345
2023-06-27T21:58:25+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
1
2
2
4
5

我们点击继续:

Go语言远程调试,golang,golang

再次查看远端服务器的执行情况:

[root@zsx go-dlv]# dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient --check-go-version=false
API server listening at: [::]:2345
2023-06-27T21:58:25+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
1
2
2
4
5
10
tom
6
7
8
9
10

到了这里,关于Go语言远程调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GO-vscode远程开发和调试

    本文内容主要包括: 概述: 主要就是把代码放到服务器上然后远程去开发和调试 工具: vscode 远程端: linux vscode安装Remote - SSH,Remote Explorer,Remote Development,Remote - SSH: Editing Configuration Files,Remote - Tunnels插件  完成: delve,简称dlv是go语言的最常用的调试器  默认模板  在

    2024年02月11日
    浏览(44)
  • Golang-语言源码级调试器 Delve

    Go 目前的调试器有如下几种: GDB 最早期的调试工具,现在用的很少。 LLDB macOS 系统推荐的标准调试工具,单 Go 的一些专有特性支持的比较少。 Delve 专门为 Go 语言打造的调试工具,使用最为广泛。 本篇简单说明如何使用 Delve 工具来调试 Go 程序,使用的 delve 版本为 1.20.1。

    2024年02月13日
    浏览(40)
  • 【Golang】VScode配置Go语言环境

    安装VScode请参考我的上一篇博客:VScode安装_㫪548的博客-CSDN博客 接下来我们直接进入正题: Go语言(又称Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言具有简洁、高效、可靠和易于阅读的特点,被设计用于解决大型项目的开发需求。它结合了静态类型

    2024年02月03日
    浏览(64)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(56)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(86)
  • 【Golang】Golang进阶系列教程--Go 语言数组和切片的区别

    在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。 数组和切片是两个常用的数据结构。它们都可以用于存储一组相同类型的元素,但在底层实现和使用方式上存在一些重要的区别。 Go 中数组的长度是不可改变的

    2024年02月15日
    浏览(57)
  • 【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?

    在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。 切片是一种引用类型,它有三个属性:指针,长度和容量。 底层源码定义如下: 指针: 指向

    2024年02月14日
    浏览(63)
  • 【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?

    Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。 然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。 先看一段代码示例: 当我们多执行几次这段代码时,就会发现,输出的顺序是不同的。 首先,Go 语言

    2024年02月14日
    浏览(65)
  • Go新项目-Golang使用RemoteAddr()获取远程主机地址的注意事项(9)

    http.Request 下的方法RemoteAddr() 可以获取客户端的地址和端口号,最近的一个项目中用到了这个方法。 使用过程中一直都没有什么问题,但是当项目上线之后就发现不管怎么获取ip,客户端地址都是127.0.0.1 。 对于这个问题一直百思不得其解,最后搞了半天才发现是nginx 的原因。

    2024年01月20日
    浏览(56)
  • 【Golang】三分钟让你快速了解Go语言&为什么我们需要Go语言?

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标: 写好专栏的每一篇文章 Go 语言从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关

    2023年04月21日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包