当前位置: 首页 > news >正文

服务器端开发-golang dlv 远程调试

1。需要root权限的服务器代码调试

  1. sudo ./app
  2. ps to get pid
  3. dlv attach pid --headless --listen=:40000 --api-version=2 --accept-multiclient
  4. attach the golang IDE or other IDE

2。不需要root权限的服务器代码调试,另一种选择

  1. dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient exec ./app -- -config-file=config file path
  2. attach the golang IDE or other IDE

"-- -config-file=config file path" is optional

  • --listen=:40000: debug的监听端口
  • --headless=true --api-version=2 --accept-multiclient: run in a headless mode, specify api version and allow multi client,
  • exec app: execute the go binary app.
  • --accept-multiclient 参数表示客户端断开连接之后,远程的dlv程序不关闭,否则在客户端点击断开连接后,远程dlv服务就会关闭(也就是不加这个参数调试时一次性的)

3. 编译的时候记得 go build -gcflags="all=-N -l", 关闭优化

在客户端.luanch.json

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

这篇文章可以参考 Remote debug your go code,记录的是第二种调试方法,还有docker,以及goland的设置。

在容器中使用dlv时 需要注意:

问题是动态编译dlv二进制文件。当您使用go install下载二进制文件时,默认情况下,它使用CGO_ENABLED=1下载(除非重写),这要求在运行时加载大多数运行时库(包括glibc)。这在某些容器映像中可能无法正常工作,因为其中不存在库(例如,从scratch/distro-less静态映像构建的映像)。

因此,为了避免与容器映像的依赖关系之间的依赖关系,请始终通过将上述标志设置为0来下载静态编译的依赖关系。在docker上下文中使用下载的二进制文件

CGO_ENABLED=0 go install github.com/go-delve/delve/cmd/dlv@latest

您还可以在dlv上观察静态编译版本和动态编译版本之间的ldd输出。前者不会列出需要动态加载的库,后者会列出它们。

调试中遇到问题:

在k8s容器中运行dlv attach 报错try writing “0“ to /proc/sys/kernel/yama/ptrace_scope_tankpanv的博客-CSDN博客

http://www.lryc.cn/news/112353.html

相关文章:

  • STM32F103——时钟配置
  • 【Linux】信号捕捉
  • 超详情的开源知识库管理系统- mm-wiki的安装和使用
  • 安卓:UDP通信
  • clickhouse安装
  • Cpp学习——string(2)
  • python进阶编程
  • 算法练习--leetcode 链表
  • Android性能优化—Apk瘦身优化
  • 前端主题切换方案——CSS变量
  • Java8 list多属性去重
  • kafka-保证数据不重复-生产者开启幂等性和事务的作用?
  • [AI in security]-214 网络安全威胁情报的建设
  • Javaweb学习(2)
  • leetcode410. 分割数组的最大值 动态规划
  • C函数指针与类型定义
  • 最新2024届【海康威视】内推码【GTK3B6】
  • 边写代码边学习之LSTM
  • Elasticsearch8.8.0 SpringBoot实战操作各种案例(索引操作、聚合、复杂查询、嵌套等)
  • 《MySQL高级篇》十五、其他数据库日志
  • 【Linux】【预】配置虚拟机的桥接网卡+nfs
  • 【Android】Retrofit2和RxJava2新手快速上手
  • 1.4 Nacos注册中心
  • AOJ 2200 Mr. Rito Post Office 最短路径+动态规划+谨慎+思维
  • 红米电视 ADB 安装 app 报错 failed to authenticate xxx:5555
  • Linux 下设置开机自启动的方法
  • MySQL常见问题处理(三)
  • maven中常见问题
  • vue2中bus的使用
  • 实证研究在机器学习中的应用