Go语言远程调试

news2024/11/19 15:22:02

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 中配置远程调试:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

删除 "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行下断点。

在这里插入图片描述

点击调试:

在这里插入图片描述

在这里插入图片描述

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

[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

我们点击继续:

在这里插入图片描述

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

[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 中配置远程调试:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

点击调试:

在这里插入图片描述

在这里插入图片描述

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

[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

我们点击继续:

在这里插入图片描述

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

[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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(四)Kafka 消费者

文章目录 1. Kafka 消费者相关概念消费者和消费者组(1)横向伸缩消费者(2)横向伸缩消费者组 分区再平衡再均衡的类型(1)主动再均衡(2)协作再均衡(增量再均衡) …

MyBatisAnnotationSqlInjection.ql学习

源码位置 java\ql\src\experimental\Security\CWE\CWE-089 源代码 /*** name SQL injection in MyBatis annotation* description Constructing a dynamic SQL statement with input that comes from an* untrusted source could allow an attacker to modify …

【UE5 Cesium】14-Cesium for Unreal 加载服务器上的倾斜摄影

目录 前言 步骤 一、下载安装tomcat 10 二、下载安装JDK 三、启动Tomcat 四、Tomcat加载倾斜摄影 五、UE中加载Tomcat上的倾斜摄影 前言 上一篇文章(【UE5 Cesium】13-Cesium for Unreal 加载本地倾斜摄影)介绍了如何在UE中加载本地倾斜摄影&am…

链表专题1—24. 两两交换链表中的节点 234.回文链表 143.重排链表 141.环形链表 142.环形链表II 160.链表相交 C++实现

文章目录 24. 两两交换链表中的节点234.回文链表链表转数组统计长度反转后半部分链表 快慢指针 143. 重排链表数组 双指针 超时双队列反转和插入链表 141. 环形链表142.环形链表II160.链表相交 24. 两两交换链表中的节点 迭代法,时间复杂度: O ( n ) O(n…

App store里简单好用的便签app有哪些?

作为一个打工人,我经常需要一个简单而又好用的便签应用来记录我的各种事务和备忘。我曾在App Store里尝试了许多便签应用,但有一款应用真正让我留下了深刻的印象——敬业签。 敬业签的简单和易用性让我爱不释手。无论是添加新的便签,设置提醒…

基础大模型能像人类一样标注数据吗?

自从 ChatGPT 出现以来,我们见证了大语言模型 (LLM) 领域前所未有的发展,尤其是对话类模型,经过微调以后可以根据给出的提示语 (prompt) 来完成相关要求和命令。然而,直到如今我们也无法对比这些大模型的性能,因为缺乏…

为什么程序员更容易抑郁?是因为...

【1】 前段时间,有一位朋友,在后台留言: 《谢谢你听我吐槽,说出来感觉好了很多》 这位程序员朋友在深圳大厂,35岁,10年研发经验,倍感抑郁,吐露了自己的近况: &#xff08…

IDE /skipping incompatible xxx_d.dll when searching for -lxxx_d

文章目录 概述场景复现用以测试的代码编译器位数不匹配导致?保持编译器类型一致再验证编译器位数的影响MingW下调用OS的库咋不告警?以mingW下使用winSocket为例MingW下网络编程的头文件分析该环境下链接的ws2_32库文件在哪里?mingW为啥可以兼容window下的动态库 概…

MySQL自治平台建设的内核原理及实践(下)

总第566篇 2023年 第018篇 本文整理自美团技术沙龙第75期的主题分享《美团数据库攻防演练建设实践》,系超大规模数据库集群保稳系列(内含4个议题的PPT及视频)的第4篇文章。 本文作者在演讲后根据同学们的反馈,补充了很多技术细节&…

【Web狗自虐系列1】Pwn入门之初级ROP

0x0 栈介绍 栈式一种典型的后进先出的数据结构,其操作主要有压栈(push)与出栈(pop)两种操作 压栈与出栈都是操作的栈顶 高级语言在运行时都会被转换为汇编程序,在汇编程序运行过程中,充分利用了这一数据结构。每个程序在运行时都有虚拟地址…

国产化适配再进一步,融云完成欧拉、TDSQL、优炫等多方适配

近期,融云完成了与开源操作系统欧拉(openEuler)、企业级数据库 TDSQL 和优炫的适配工作,国产化上下游生态适配之路再次迈进坚实一步。关注【融云 RongCloud】,了解协同办公平台更多干货。 欧拉(openEuler&a…

DoTween 学习

部分参考:DOTween中文详解(持续更新)_一条爱玩游戏的咸鱼的博客-CSDN博客 官方文档:DOTween - Documentation (demigiant.com) 什么是Tween(补间) 补间,一般指补间动画,例如uni…

Ceph集群的部署

一、Ceph集群的部署 1、集群环境 1.1 集群架构 主机名业务IP存储IP服务器配置系统类型集群角色ceph-mon1-deploy172.17.10.61/16192.168.10.61/242C/4GUbuntu1804mondeploy(部署节点)ceph-mon2172.17.10.62/16192.168.10.62/242C/4GUbuntu1804mon(监控节点)ceph-mon3172.17.…

fun函数方法体=返回值,kotlin

fun函数方法体返回值&#xff0c;kotlin var str: String "fly"fun main(args: Array<String>) {println(getMyString())println(getMyInt())str "phil"println(getMyString())println(getMyInt()) }fun getMyInt(): Int {return if (str.equals(&…

javaweb学习4

作业 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript">//动态绑定表单提交window.onloadfunction (){//得到form2的dom对象var fo…

多元分类预测 | Matlab基于北方苍鹰优化深度置信网络(NGO-DBN)的分类预测,多输入模型,NGO-DBN分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab基于北方苍鹰优化深度置信网络(NGO-DBN)的分类预测,多输入模型,NGO-DBN分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可…

在IDEA中如何查看svn版本提交历史记录

1.查看svn版本历史记录方法一 2.查看svn版本历史记录方法二 ①拉取远程库代码 ②提交本地代码到远程 ③查看历史记录 ④回退代码 3.查看历史版本记录的提交 4.选择上图中某次提交记录再次选图中序号4

python接口自动化(十九)--Json 数据处理---实战(详解)

简介 上一篇说了关于json数据处理&#xff0c;是为了断言方便&#xff0c;这篇就带各位小伙伴实战一下。首先捋一下思路&#xff0c;然后根据思路一步一步的去实现和实战&#xff0c;不要一开始就盲目的动手和无头苍蝇一样到处乱撞&#xff0c;撞得头破血流后而放弃了。不仅什么…

模块联邦实践

在聊模块联邦之前&#xff0c;我们先了解下在多个项目下&#xff0c;前端模块如何复用的 跨项目模块复用方案 1、npm 包包管理工具对于前端应用来说不可或缺&#xff0c;我们可以将模块上传到 npm 包&#xff0c;在需要的项目中引入&#xff0c;以此来复用一些公用模块。 2、mo…

基于CANN的AI推理最佳实践丨多路极致性能目标检测应用设计解密

当前人工智能领域&#xff0c;最热门的无疑是以ChatGPT为代表的各种“新贵”大模型&#xff0c;它们高高在上&#xff0c;让你无法触及。但在人们的日常生活中&#xff0c;实际应用需求最大的还是以Yolo模型为代表的目标检测“豪强”&#xff0c;它们每天都在以各种方式落地、应…