linux程序断点,Ubuntu下使用GDB断点Go程序

大家好,今天为大家带来Ubuntu下,使用GDB断点调试Go程序。由于之前没有接触过GDB调试,而Go语言本身内置也没有什么调试工具,不像Eralng,有Debugger可以使用,我从网上搜索了下,也没有相关的中文教程,所以这边自己研究了下,给新手带来一篇关于GDB简单调试Go程序的文章。(关于GDB的文章还是不少的)

首先,编写测试代码,如下:

package main

import (

"fmt"

)

func main() {

fmt.Printf("%s\n", "hello, world")

printNumber()

}

func printNumber() {

var count int;

count = 10

sum := 0

for i := 0; i < count; i++ {

sum = sum + i

fmt.Printf("i = %d, sum = %d\n", i, sum)

}

}

编译,并运行程序(Ubuntu下的Sublime Text 2:

go build main.go

./main

a8b87595eeed5ae0e0440b2788554dc8.png

好了,现在我们就可以开始使用GDB调试,生成的main应用程序了,这里为了快速找到应用程序,我把该程序和代码放置到 ~/ 目录下。

一,使用GDB加载应用程序,打开终端,输入 gdb main,如下图:

7f167065021a5d495913320995b389b6.png

这里注意最后两行:

Reading symbols from /home/administrator/main...done.

Loading Go Runtime support.

读取main程序完成和加载Go运行时。

二,输入 l 命令,相当于list,从第一行开始列出源码,如下图:

2e93953049ca76a160c8de0e8bb39b29.png

认真的朋友,会发现main.go代码,并没有完整的显示在这里,怎么回事呢www.it165.net?

这里我们直接再敲个回车,就会产生如下图的结果:

25ac41ae01f62dec2bc22309d70e8bf4.png

还是不完整,再来个回车呢?

1513692d1d28426fe08fbab45ad9fbb0.png

现在已经完整了,如果再来个回车呢?

525e43704acca32f014487483d9d83a5.png

这个时候,根据提示,我们就知道代码已经全部显示出来了。

三,设置断点,并显示断点信息:

输入 break 8,表示在第8行,设置一个断点。

输入 break printNumber,表示在函数 printNumber 函数入口处,设置一个断点。(这里并没有成功停在这个断点,麻烦知道的朋友告知,非常感谢)

输入 break 14,表示在第14行,设置一个断点。

输入 info break,表示查看断点信息。

如图:

01a6ffa188b7b25fc0e50c9b754aab2e.png

四,运行程序,并调试。

输入 r,运行程序,run命令简写,程序将停止第8行断点处,如下图:

75cc781d44b8d09756d71a4b099cd817.png

使用 n,单条语句执行,next命令简写。

使用 c,继续运行程序(跳过当前断点),continue命令简写。

使用bt,查看函数堆栈。

使用finish,退出函数。

2e17b3698ab4bad6f48853f7d8e07b48.png

从这里我们发现,程序并没有停止在第二个断点,这里麻烦知道原因的朋友告知下,非常感谢。

下面是我简单调试的结果:

99fcdbedb703efd1231851a9360d7df7.png

这里最后还有个疑问,当我使用 p,输出 count,和 sum 值的时候,它的值很奇怪,麻烦知道的朋友留言告知,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值