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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

删除 "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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自学大语言模型之GPT

GPT火爆的发展史 2017年6月OpenAI联合DeepMind首次正式提出的:Deep Reinforcement Learning from Human Preferences,即基于人类偏好的深度强化学习,简称RLHF 2017年7月的OpenAI团队提出的对TRPO算法的改进:PPO算法 GPT-1&#…

Tomcat的优化多实例部署

目录 一.tomcat核心组件模块 1.2. toncat功能组件结构 二.Tomcat 优化 三.简述Tomcat请求过程 四.Tomcat 多实例部署 多实例部署图示 1.关闭防火墙 拖入软件包 2.安装JDk 设置JDK环境变量 3.解压tomcat 创建目录 4.配置 tomcat 环境变量 5.修改 tomcat2 中的 server.xm…

学习系统编程No.29【线程执行过程之页表详解】

引言: 北京时间:2023/7/3/14:09,刚睡醒,放假在家起床时间确实不怎么好调整,根本固定不了一点,当然通俗点说也就是根本起不来,哈哈哈,已经很少见到那种7点起来码字的情形了&#xff…

UART-GD32

UART-GD32 通信的概念 同步通信和异步通信 数据帧格式 波特率 使用步骤 引脚分布

gitLab配置ssh实现私钥访问

1.配置ssh文件 1.cd C:\Users\用户名\.ssh 找到文件夹 删除.ssh 里面所有其他文件方面我们配置要最新的 2.win r cmd 呼出命令行 ssh-keygen -t rsa -C "必须对应gitLab用户名" 3.生成文件夹拿到ssh 4.复制id_rsa_pub 文件的全部字符串 公钥给到GitLab服务器 2.公…

Spring Boot 中的模板引擎是什么,如何使用

Spring Boot 中的模板引擎是什么,如何使用 在 Web 应用程序中,模板引擎是一种用于动态生成 HTML、XML、JSON 等文档的工具。Spring Boot 内置了多种常见的模板引擎,例如 Thymeleaf、Freemarker、Velocity 等,让我们可以轻松地创建…

线性代数行列式的几何含义

行列式可以看做是一系列列向量的排列,并且每个列向量的分量可以理解为其对应标准正交基下的坐标。 行列式有非常直观的几何意义,例如: 二维行列式按列向量排列依次是 a \mathbf{a} a和 b \mathbf{b} b,可以表示 a \mathbf{a} a和…

Lua学习笔记:浅谈对垃圾回收的理解

前言 本篇在讲什么 Lua的垃圾回收 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text编辑器 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f…

3、boostrap图片视频上传展示

boostrap图片视频上传展示 1、展示效果2、html代码 1、展示效果 项目目录结构 2、html代码 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!--<link rel"st…

记一次 .NET 某工控视觉系统 卡死分析

一&#xff1a;背景 1. 讲故事 前段时间有位朋友找到我&#xff0c;说他们的工业视觉软件僵死了&#xff0c;让我帮忙看下到底是什么情况&#xff0c;哈哈&#xff0c;其实卡死的问题相对好定位&#xff0c;无非就是看主线程栈嘛&#xff0c;然后就是具体问题具体分析&#x…

一起来看看文档翻译哪个好吧

在繁忙的都市生活中&#xff0c;小玲是一位年轻的职场人士。她的工作经常需要处理各种文档和文件&#xff0c;而其中不乏需要与外国合作伙伴交流的时候。然而&#xff0c;她并不熟悉其他语言&#xff0c;这给她的工作带来了一定的困扰。于是&#xff0c;她开始寻找免费的文档翻…

什么是AOP?

目录 一、AOP简介 1、AOP简介和作用 2、AOP的概念 二、AOP的基本实现 三、AOP工作流程 1 、AOP工作流程 2、AOP核心概念 四、AOP切入点表达式 1、语法格式 2、通配符 五、AOP通知类型 1、AOP通知分类 2、AOP通知详解 &#xff08;1&#xff09;前置通知 &#xf…

MySQL-分库分表详解(四)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

【ArcGIS微课1000例】0069:用ArcGIS提取一条线的高程值

本实验讲解用ArcGIS软件,基于数字高程模型DEM提取一条线的高程值并导出。 文章目录 一、加载实验数据二、将线转为折点三、提取折点高程值四、导出高程值五、注意事项【相关阅读】:【GlobalMapper精品教程】060:用dem提取一条线的高程值 一、加载实验数据 本实验使用的数据…

初学者一步步学习python 学习提纲

当学习Python时&#xff0c;可以按照以下提纲逐步学习&#xff1a; 入门基础 了解Python的历史和应用领域安装Python解释器和开发环境&#xff08;如Anaconda、IDLE等&#xff09;学习使用Python的交互式解释器或集成开发环境&#xff08;IDE&#xff09;进行简单的代码编写和…

Seafile搭建个人云盘 - 内网穿透实现在外随时随地访问

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4. 公网访问测试5. 结语 转载自cpolar极点云文章&#xff1a;使用SeaFile搭建…

【电影推荐系统】基于 ALS 的协同过滤推荐算法

目录 目的 用户电影推荐矩阵主要思路如下 1 UserId 和 MovieID 做笛卡尔积&#xff0c;产生&#xff08;uid&#xff0c;mid&#xff09;的元组 2 通过模型预测&#xff08;uid&#xff0c;mid&#xff09;的元组。 3 将预测结果通过预测分值进行排序。 4 返回分值最大的 …

elk中kibana使用

1.前言 kibana是一款作为elasticsearch可视化的一款软件&#xff0c;将elasticsearch中的数据以可视化的状态展现出来&#xff0c;kibana也提供了查询、统计、修改索引等功能 2.kibana使用 索引管理 在索引管理中&#xff0c;可以看到所有索引的状态、运行状况、主分片、副本…

pytorch快速入门中文——07(TensorBoard)

使用 TensorBoard 可视化模型&#xff0c;数据和训练 原文&#xff1a;https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html 在 60 分钟突击中&#xff0c;我们向您展示了如何加载数据&#xff0c;如何通过定义为nn.Module子类的模型提供数据&#xff0c;如…

计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器控制的预取和利用HBM扩展内存层次(七)

优化九&#xff1a;编译器控制的预取以减少丢失惩罚或丢失率 硬件预取的替代方案是编译器在处理器需要数据之前插入预取指令来请求数据。 预取有两种类型&#xff1a; ■ 寄存器预取将值加载到寄存器中。 ■ 高速缓存预取仅将数据加载到高速缓存。 这两种类型都可以分为有错…