Go语言的调试

Go 服务调试精解 首先讲解了 Go 语言为我们提供的性能分析利器 pprof,并分别介绍了在分析内存指标、CPU指标、锁与阻塞指标等方面的应用。然后讲解了另外一款性能分析工具 Trace,它可以跟踪并采集 Go 进程的诸多事件,通过这些事件可以很清楚地知道 Go 进程每时每刻都在做什么,这对分析并解决 Go 服务性能问题是非常有用的。最后,介绍了 Go 语言专用的调试工具 dlv,并通过具体的例子讲解了如何使用 dlv 调试 Go 程序。 阅读详情

日志:

Go语言提高了log包,让应用程序能够将日志写入终端或文件。

Go语言提供的日志功能,程序清单如下:

package main

import(
  "log"
)

func main(){
  log.Printf("This is a log message.")
}

运行结果如下:

2022/01/25 19:10:06 This is a log message.

记录致命错误,程序清单如下:

package main

import(
  "errors"
  "log"
)

func main(){
  var errFatal=errors.New("We only just started and we are crashing")
  log.Fatal(errFatal)
}

运行结果如下:

2022/01/25 19:13:57 We only just started and we are crashing
exit status 1

将日志写入文件:程序清单如下:

package main

import(
  "log"
  "os"
)

func main(){
  f,err:=os.OpenFile("main.txt",os.O_APPEND|os.O_CREATE|os.O_RDWR,0666)
  if err!=nil{
    log.Fatal(err)
  }
  defer f.Close()
  log.SetOutput(f)
  for i:=1;i<=5;i++{
    log.Printf("Log iteration %d",i)
  }
}

运行之后,生成main.txt新文件,打开main.txt文件内容如下:

2022/01/25 19:24:32 Log iteration 1
2022/01/25 19:24:32 Log iteration 2
2022/01/25 19:24:32 Log iteration 3
2022/01/25 19:24:32 Log iteration 4
2022/01/25 19:24:32 Log iteration 5

日志程序示例,程序清单如下:

package main

import(
  "log"
)

func main(){
  for i:=1;i<=5;i++{
    log.Printf("Log iteration %d",i)
  }
}

输入命令行如下:

go run main.go>main1.txt 2>&1

运行之后,生成main1.txt新文件,打开main1.txt文件内容如下:

2022/01/25 19:32:04 Log iteration 1
2022/01/25 19:32:04 Log iteration 2
2022/01/25 19:32:04 Log iteration 3
2022/01/25 19:32:04 Log iteration 4
2022/01/25 19:32:04 Log iteration 5

打印数据:

简单的猜名游戏,程序清单如下:

package main

import(
  "bufio"
  "fmt"
  "os"
  "strings"
)

func main(){
  reader:=bufio.NewReader(os.Stdin)
  fmt.Print("Guess the name of my pet to win a prize: ")
  text,_:=reader.ReadString('\n')
  text=strings.Replace(text,"\n","",-1)
  fmt.Println("[DEBUG] text is:",text)
  if text=="John"{
    fmt.Println("You won! You win chocolate!")
  }else{
    fmt.Println("You didn't win. Better luck next time")
  }
}

运行结果如下:输入john

Guess the name of my pet to win a prize: john
[DEBUG] text is: john
You didn't win. Better luck next time

再次运行结果如下:输入John

Guess the name of my pet to win a prize: John
[DEBUG] text is: John
You won! You win chocolate!

使用fmt包:

使用fmt包来调试代码,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  s:="Hello World"
  fmt.Printf("String is %v\n",s)
}

运行结果如下:

String is Hello World

使用fmt包打印多个变量,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  s:="Hello World"
  t:="Goodbye, Cruel World"
  fmt.Printf("s is %v, t is %v\n",s,t)
}

运行结果如下:

s is Hello World, t is Goodbye, Cruel World

使用fmt包打印结构体的值,程序清单如下:

package main

import(
  "fmt"
)
type Animal struct{
  Name string
  Color string
}
func main(){
  a:=Animal{
    Name:"cat",
    Color:"Black",
  }
  fmt.Printf("%v\n",a)
  fmt.Printf("%+v\n",a)
}

运行结果如下:

{cat Black}
{Name:cat Color:Black}

使用Delve:

Go语言没有官方调试器,但很多社区项目都提供了Go语言调试器。

要安装delve,在终端上输入命令行如下:

go get github.com/derekparker/delve/cmd/dlv

运行结果如下:

# cd .; git clone -- https://github.com/derekparker/delve /Users/douxiaobo/go/src/github.com/derekparker/delve

Cloning into '/Users/douxiaobo/go/src/github.com/derekparker/delve'...

fatal: unable to access 'https://github.com/derekparker/delve/': LibreSSL SSL_connect: Operation timed out in connection to github.com:443

package github.com/derekparker/delve/cmd/dlv: exit status 128

要检查是否正确地安装了Delve,在终端中执行命令dlv --help。

运行结果如下:

-bash: dlv: command not found

这个问题就搁置了。

使用gdb:

根据上面的代码,在终端输入命令行如下:

$ go build main.go

再输入命令行如下:

gdb main

结果如下:

-bash: gdb: command not found

有可能在Mac os 没有GUN调试器。

输入命令行如下:

break main.echo

运行结果如下:

-bash: break: only meaningful in a `for', `while', or `until' loop

【go从入门到精通】go的debug调试技巧 作者简介:高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。在日常学习和开发过程中,我们会经常使用debug进行调试,为了探索各种奇奇怪怪的语法糖,为了解决一个疑难问题,为了修复一个bug...这一篇文章我将带来如何调试debug的技巧。 阅读详情

相关推荐

Go必知必会系列:性能优化与调试

作者:禅与计算机程序设计艺术 1.背景介绍 Go(Golang)编程语言自诞生之日起,它就已经成为当今世界上最流行的编程语言之一。但是Go作为一门静态类型的语言,在一定程度上限制了它的运行效率。因此,随着时间的推移,Go语言越来越受到关注,越来越多的公司开始转向用Go开发应用系统,尤其是在云计算、微

AI天才研究院 260

Go 的调试

调试之前,项目文件夹中需要运行命令: go mod init my-app-name go debugger tool dlv,在配置 vscode go 开发环境时就可以安装: 然后 go code 中可以设 breakpoint,选择 vscode -> run -> start debugging,就可以开始调试代码,例如 step over, continue, 等等,这和其他语言比方说 C++ 的调试方法几乎完全一样。 ...

学习笔记 2508

25、Go语言的调试技巧

本文详细介绍了Go语言中的各种调试技巧和工具,包括基本的打印调试、使用Delve进行断点调试、日志记录、pprof性能分析、race detector竞态条件检测等。同时探讨了高效调试的最佳实践,如代码审查、单元测试驱动开发以及IDE的使用,并结合实战案例分析了如何排查并发程序和Web服务器的性能问题。通过掌握这些方法,开发者可以显著提升Go程序的调试效率和代码质量。

ll5678的博客 112

Go语言Debug调试

Go语言Debug调试

YIYIYI 5406

逆向分析第一步:如何从HEX文件‘还原’出单片机的原始程序与数据?

本文详细解析了如何从HEX文件逆向分析出单片机的原始程序与数据,涵盖了固件逆向的底层逻辑与实践。通过介绍HEX文件的结构、内存映像重建技术以及专业工具链的使用,帮助读者掌握从十六进制数据到可执行代码的完整流程,适用于嵌入式系统开发和逆向工程领域。

weixin_29745609的博客 316

Matlab之fdesign的应用说明

fdesign 是 MATLAB 中用于数字滤波器设计的工具(属于),它提供了一种系统化的方式来定义滤波器参数并生成相应的滤波器。指定滤波器的频率、幅度等参数。例如,设计一个低通滤波器:Fs = 1000;% 采样率 (Hz)% 通带截止频率% 阻带截止频率Apass = 1;% 通带衰减 (dB)Astop = 60;% 阻带衰减 (dB)

嵌入式老牛的博客 1052

Go语言(Golang)安装下载配置及debug调试

与Java类似,Go语言使用前也需要安装开发环境,并配置环境变量。下面以Windows平台为例,演示整体流程。

amumu_coding的博客 4822

SAP中贸易伙伴的应用原理简析

公司也称为贸易伙伴,是出具合并报表的组织单位,可以为客户和供应商分配公司(贸易伙伴),用于识别集团内关闻公司间的业务往来,在编制合并报表时进行往来账务的计算处理。 如下图某贸易伙伴公司(关联方名称G0059)在我方公司的SAP系统中有多重身份(即是供应商,又是客户)。那么在我方公司SAP系统中建立起公司(贸易伙伴),并关联到供应商和客户主数据中。之后,就可以通过G0059这个贸易伙伴名称来识别与该贸易伙伴间的往来业务。 相应的配置设定如下: 定义公司(贸易伙伴或关联方) 会计凭证中会

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 9814

【六袆-Golang】Golang:安装与配置Delve进行Go语言Debug调试

Delve是一个开源的Go语言调试器,它提供了丰富的功能,包括设置断点、单步执行、查看变量值等。Delve支持在本地和远程调试Go程序,使得开发者能够更方便地定位和解决代码中的问题。官方地址:github.com/go-delve/delve。

六祎的博客 1934

用Multisim复刻经典收音机:从零搭建超外差中波调幅接收机(附仿真源文件)

本文详细介绍了如何使用Multisim软件从零搭建超外差中波调幅接收机,复刻经典收音机的设计过程。通过模块化搭建、稳定性优化和增益分配等实战指南,帮助读者掌握超外差架构的核心技术,并附赠仿真源文件供实践参考。

weixin_28744423的博客 473

向NCBI上传16S rDNA数据的操作详解

专门介绍向NCBI上传16S rDNA数据的方法不太多。因为自己有上传数据的需要,所以决定边摸索边写下操作流程。如果这篇博文交代了上传步骤以及一些描述文件属性的书写,帮到你的话,还请点赞收藏。

yue81560的博客 2万+

Go语言的调试工具

GDB:GNU调试器,是一种通用的调试工具,支持多种编程语言,包括Go语言。Delve:是专为Go语言设计的调试器,支持断点、单步执行、变量查看等操作。pprof:Go语言的性能分析工具,用于生成程序的运行性能报告。GoTrace:用于分析Go程序的执行过程,帮助开发者理解程序的运行流程。Log包:用于输出日志,可以自定义日志输出,帮助开发者追踪程序执行情况。接下来,我们将深入探讨这些调试工具的使用方法及其适用场景。GDB是一款强大的调试工具,能够处理多种语言的调试需求,包括Go。

2501_91503246的博客 1034

27-eMMC电路设计

eMMC硬件电路设计

weixin_66510961的博客 4005

在Go语言中如何调试

介绍在Go语言中如何进行程序调试。

禅与代码的艺术 1668

【STM32Cube_14】使用硬件I2C读写环境光强度传感器(BH1750)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)

Mculover666的博客(嵌入式) 7240

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2353

go语言写的编译成了二进制文件如何查看源代码_Golang自学准备篇:如何快速调试Go语言

Go 语言作为开源项目,我们可以很轻松地获取它的源代码,作为一门编程语言,它有着非常复杂的项目结构和庞大的代码库,今天的 Go 语言项目中差不多有 150 万行源代码,其中包含将近 140 万行的 Go 语言,我们可以使用如下所示的命令查看 Go 语言的代码行数:$ cloc src 5988 text files. 5875 unique files. 1165 file...

weixin_39846191的博客 1291

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

go 代码实现html输入_Golang自学准备篇:如何快速调试Go语言

Go 语言作为开源项目,我们可以很轻松地获取它的源代码,作为一门编程语言,它有着非常复杂的项目结构和庞大的代码库,今天的 Go 语言项目中差不多有 150 万行源代码,其中包含将近 140 万行的 Go 语言,我们可以使用如下所示的命令查看 Go 语言的代码行数:$ cloc src 5988 text files. 5875 unique files. 1165 file...

weixin_42295528的博客 353

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Go语言的嵌入式调试

Go语言(又称Golang)是由Google开发的一种静态类型、编译型的编程语言。并发性:Go语言内置了goroutine和channels,使得并发编程变得简单而高效。简洁性:Go语言的语法简洁明了,易于学习和使用。跨平台性:Go语言可以在不同的平台上编译运行,支持Windows、Linux和MacOS等操作系统。强类型系统:Go语言拥有强大的类型系统,减少了运行时错误的可能性。由于这些优势,Go语言在某些嵌入式应用场景中展现出了很强的吸引力,但也面临着调试和部署的独特挑战。

2501_91324957的博客 517

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

go语言的gdb调试方法

gdb调试go

flynetcn的专栏 4411

如何调试Go语言自身的源码运行Go语言自身的源码报错

作为一名Gopher,可能都很想从源码级别去熟悉了解Go,但对于初学者,这可能有点障碍,因为go源码打开后,不能使用go run运行代码也不能进行调试,本文就是为了打破这个障碍,扫清我们学习Go自身源码的挡路石。

Go与Python双剑合一 1644

Go语言远程调试

Go语言远程调试

YIYIYI 1332

Go 语言的高级调试方法

Andrii Soldatenko 最近做的一个Go语言高级调试视频分享,我们知道有很多教程教我们怎么写Go,但是很少有资料分享怎么debug程序,这个视频非常有用,这里先截一些图给大家...

Go中国 710

Go语言中的断点调试

这些调试工具和方法可以帮助你更好地理解和修复代码中的问题。建议从简单的 print 调试开始,然后逐步掌握 VSCode + Delve 的使用,这将大大提高你的调试效率。在 VSCode 中安装 “Go” 扩展(ms-vscode.go)

远方雪的专栏 1592

Golang-语言源码级调试器 Delve

GDB最早期的调试工具,现在用的很少。LLDBmacOS 系统推荐的标准调试工具,单 Go 的一些专有特性支持的比较少。Delve专门为 Go 语言打造的调试工具,使用最为广泛。本篇简单说明如何使用Delve工具来调试 Go 程序,使用的delve版本为 1.20.1。delve 的汉语意思是:钻研、探索;用这个来命名一个debug工具还是非常的形象。

Ch3nnn的博客 1790

golang语言开发:1.在windows下使用vscode搭建golang环境并进行调试

一种语言会老吗?我觉得会的,语言变老了,就出现了Swift语言。头号的语言c语言变老了,golang语言就出现了。他们是像似一种血缘的关系,一出生就带有了某种的相似性。如果你对c语言很熟悉,不妨看看golang语言,看看他们的相似性,和golang语言自身带有的现代性。

haleycat的博客 1059
上一篇: Go语言的使用包实现代码重用
下一篇: Homebrew安装失败的问题和解决方法
DXB2021
博客等级 码龄5年 307粉丝 289原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值