您的位置 首页 golang

30. 如何使用 GDB 调试 Go 程序?

Hi,大家好,我是明哥。

在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。

我的在线博客: golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime


做为新手,熟练掌握一个好的调试工具,对于我们学习语言或者排查问题的时候,非常有帮助。

你如果使用 VS Code 或者 Goland ,可以直接上手,我就不再写这方面的文章了。

其实相比有用户界面的 IDE 调试工具,我更喜欢简单直接的命令行调试,原因有三点:

  1. 速度快,个人感觉在 Windows 下速度巨慢
  2. 依赖少,在 Linux 服务器上 也能轻松调试
  3. 指令简单,我习惯只使用快捷键就能操作

如果你有和我一样的感受和习惯,可以看下今天的文章,介绍的是 GDB 调试工具。

1. 下载安装 Go

在 Linux 上进行调试,那咱所以得先安装 Go ,由于第一节里只讲了 Windows 的下载安装,并没有讲到在 Linux 上如何安装。所以这里要先讲一下,已经安装过了可以直接跳过。

首先在 go 下载页面上( golang.org/dl/),查看并复制源…

登陆 linux 机器 ,使用 wget 下载

$ wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz复制代码

将下载的源码包解压到 /usr/local 目录下,并设置环境变量

[root@localhost ~]# tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz[root@localhost ~]# [root@localhost ~]# export PATH=$PATH:/usr/local/go/bin[root@localhost ~]# which go/usr/local/go/bin/go[root@localhost ~]# [root@localhost ~]# go versiongo version go1.14.2 linux/amd64[root@localhost ~]# 复制代码

2. 开始进行调试

调试使用的是 GDB (好像要求版本 7.1 + ),使用前,请先确保你的机器上已经安装 GDB

[root@localhost code]# which gdb/usr/bin/gdb复制代码

准备就绪后,先在目录下写一个测试文件

package mainimport "fmt"func main(){  msg := "hello, world"  fmt.Println(msg)}复制代码

然后执行 如下命令进行编译,里面有好多个参数,有疑问的可以自行搜索引擎

# 关闭内联优化,方便调试$ go build -gcflags "-N -l" demo.go# 发布版本删除调试符号go build -ldflags “-s -w”复制代码

最后使用 GDB 命令进入调试界面

# 如果你喜欢这种界面的话,用这条命令$ gdb -tui demo# 如果你跟我一样不喜欢不习惯用界面,就使用这个命令$ gdb demo复制代码

完整操作如下:

进入 GDB 调试界面后,并不是立即可用,你先需要回车,然后再你敲入几行命令,调试窗口就会出现代码。

(gdb) b    main.main   # 在 main 包里的 main 函数 加断点Breakpoint 1 at    0x4915c0: file /home/wangbm/code/demo.go, line 5.(gdb) run  # 执行进程Starting program: /home/wangbm/code/demo Breakpoint 1, main.main () at /home/wangbm/code/demo.go:5(gdb) 复制代码

3. 详解调试指令

要熟练使用 GDB ,你得熟悉的掌握它的指令,这里列举一下

其中有几个指令的使用比较灵活

比如 l – list,查看代码

# 查看指定行数上下5行(gdb) l 8# 查看指定范围的行数(gdb) l 5:8# 查看指定文件的行数上下5行l demo.go:8# 可以查看函数,记得加包名l main.main复制代码

把上面的 l 换成 b ,大多数也同样适用

# 在指定行打断点(gdb) b 8# 在指定指定文件的行打断点b demo.go:8# 在指定函数打断点,记得加包名b main.main复制代码

还有 p – print,打印变量

# 查看变量(gdb) p var# 查看对象长度或容量(gdb) p $len(var)(gdb) p $cap(var)# 查看对象的动态类型(gdb) p $dtype(var)(gdb) iface var# 举例如下(gdb) p i$4 = {str = "cbb"}(gdb) whatis itype = regexp.input(gdb) p $dtype(i)$26 = (struct regexp.inputBytes *) 0xf8400b4930(gdb) iface iregexp.input: struct regexp.inputBytes *复制代码

以上就是关于 GDB 的使用方法,非常简单,可以自己手动敲下体验一下。

参考文章



文章来源:智云一二三科技

文章标题:30. 如何使用 GDB 调试 Go 程序?

文章地址:https://www.zhihuclub.com/5395.shtml

关于作者: 智云科技

热门文章

网站地图

深圳SEO优化公司光明百度竞价吉祥seo网站优化坑梓百搜词包坑梓网站开发西乡网站关键词优化丹竹头网站建设吉祥网页制作布吉外贸网站设计吉祥网站排名优化丹竹头百度标王惠州品牌网站设计大浪网站排名优化木棉湾百度爱采购深圳网站推广工具罗湖网站改版爱联模板网站建设大鹏网站推广方案横岗至尊标王惠州设计公司网站平湖网站改版大鹏百度关键词包年推广木棉湾企业网站建设罗湖百度关键词包年推广大鹏百搜标王大浪网络营销光明seo优化同乐建站深圳seo优化丹竹头关键词按天收费东莞百度网站优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化