大家好,我是明哥。

由于某些不可抗力,之前该专栏的所有内容都被删除了。因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒。


本文原文:http://golang.iswbm.com

Github:http://github.com/iswbm/GolangCodingTime

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

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

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

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

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

1. 下载安装 Go

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

首先在 go 下载页面上(https://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 version
go 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 ,你得熟悉的掌握它的指令,这里列举一下

  • r:run,执行程序
  • n:next,下一步,不进入函数
  • s:step,下一步,会进入函数
  • b:breakponit,设置断点
  • l:list,查看源码
  • c:continue,继续执行到下一断点
  • bt:backtrace,查看当前调用栈
  • p:print,打印查看变量
  • q:quit,退出 GDB
  • whatis:查看对象类型
  • info breakpoints:查看所有的断点
  • info locals:查看局部变量
  • info args:查看函数的参数值及要返回的变量值
  • info frame:堆栈帧信息
  • info goroutines:查看 goroutines 信息。在使用前 ,需要注意先执行 source /usr/local/go/src/runtime/runtime-gdb.py
  • goroutine 1 bt:查看指定序号的 goroutine 调用堆栈
  • 回车:重复执行上一次操作

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

比如 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 i
type = regexp.input
(gdb) p $dtype(i)
$26 = (struct regexp.inputBytes *) 0xf8400b4930
(gdb) iface i
regexp.input: struct regexp.inputBytes *

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

参考文章

  • go 官方对于 gdb 的使用说明
  • Mac 调试 golang 程序

好了,今天的文章就到这里了。

若今天的分享对你有帮助,不如点个赞,支持一下?

gdb 命令_16. 如何使用 GDB 调试 Go 程序?相关推荐

  1. android+模拟器上gdb,使用gdb在Android Emulator中进行调试c程序

    1.下载Android Debugging Utilities 2.启动Android Emulator模拟器 $ emulator @1.5_R2 3.把gdb和调试文件以及源代码放到模拟器上 $ ...

  2. GDB调试教程:1小时玩转Linux gdb命令

    原文链接:http://c.biancheng.net/gdb/ GDB 入门教程 本教程以下面的代码为例,在 Linux 系统下来讲解 GBD 的调试流程: int main (void) {uns ...

  3. gdb x命令_详解gdb的使用技巧

    点击蓝字,关注我们 01 概念 GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. 在实际应用中,有两种调试方法:在线调试和离线调试. 离线调 ...

  4. linux gdb 脚本,如何写gdb命令脚本

    作为UNIX/Linux下使用广泛的调试器,gdb不仅提供了丰富的命令,还引入了对脚本的支持:一种是对已存在的脚本语言支持,比如python,用户可以直接书写python脚本,由gdb调用python ...

  5. GDB 命令详细解释

    Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具. 和所有常用的调试工具一样,gdb提供了以 ...

  6. gdb调试常用命令速查(段错误调试)

    编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main gdb中命令: 回车键:重复上一命令 (gdb)help:查看命令帮助,具体命令查询在gdb中输入help ...

  7. linux卸载gdb命令,【Linux学习】GDB调试器基本命令必知必会(一)

    本文介绍Linux下GDB调试器常用的基本命令. 测试均在Ubuntu12.10下完成. 先看看GDB调试的效果图: 对应的源代码: //插入排序,GDB调试测试代码 #include int x[1 ...

  8. 多线程调试(gdb命令行和使用集成开发qtcreator查看线程状态)

    我在qtcreator中用调用的gdb找不到如何显示线程号对应的线程名字,因此需要继续学习使用gdb进行多线程调试. 1.创建多线程工程 2.启动进程并查看运行进程对应的id 3.使用gdb连接进程, ...

  9. android gdb 命令大全,ndk-gdb  |  Android NDK  |  Android Developers

    NDK 包含一个名为 ndk-gdb 的 Shell 脚本,可以启动命令行原生调试会话.偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档. 要求 要运行命令行原生调试, ...

  10. 使用 GDB 调试多进程程序

    使用 GDB 调试多进程程序 来源 https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html GDB 是 linux 系统上常 ...

最新文章

  1. wifidog接口文档(转)
  2. php header 重定向 url不变_PHP实现页面跳转功能
  3. mybaits十:关联查询
  4. 长沙,企业上市“再加速”
  5. DEM挖填方分析--基于水平参考面计算
  6. CF1478A - Nezzar and Colorful Ball(数学)
  7. 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)
  8. 今天,Java 12 正式发布了!
  9. AWT_Swing_JTextField (Java)
  10. 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
  11. 解决Centos7安装docker源问题
  12. 吸烟首先危害是会引起火灾,电子烟较好
  13. 简单的ideatomcat热加载
  14. C#读写西门子PLC数据
  15. mosefet驱动电路设计详解
  16. 迅雷 linux 命令行 版本号,ubuntu下迅雷极速版的安装与使用
  17. Safari插件机制研究(一)
  18. 虚幻引擎4控制台变量和命令
  19. studio 和mac快捷键
  20. 与计算机和网络有关的英语,网络的英语作文(通用10篇)

热门文章

  1. Java数据结构与算法(3) - ch04栈(栈和转置)
  2. 扩展Email系统,成就分布式协同
  3. java中递归与回调函数_如何将递归回调函数转换为异步等待格式
  4. 从stm32转向Linux,STM32MP1Distrib
  5. 广东技能大赛软件测试项目,我校喜获2019年全国职业院校技能大赛软件测试赛项二等奖...
  6. 代码管理学:首次提出代码的平台化思维
  7. VC++对话框里新添加的控件运行时不显示
  8. 微信中文件为什么不能另存?
  9. 公司部分断电,这些人就没法干活?
  10. 由超高压的超导体猜测超导的真相