GDB调试Go程序若干问题备忘

Rhino(犀牛) · · 2043 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1. 很早之前写过GDB调试简单Go程序的文章,没有带命令行参数,最近再看一个开源项目需要用到带命令行参数的调试。
如下:
查看帮助得到如下:

gdb [options] --args executable-file [inferior-arguments ...]

例如:

gdb --args revel run github.com/yourihua/console

2. 载入 Go Runtime:

source /home/yourihua/go/src/pkg/runtime/runtime-gdb.py

或者在添加文件 ~/.gdbinit,内容如下:

add-auto-load-safe-path ~/go/src/pkg/runtime/

原因如下:http://grokbase.com/t/gg/golang-nuts/12atrp2jwf/go-nuts-debugging-warning-when-loading-a-binary-runtime-gdb-py-auto-loading-has-been-declined

3. 如果需要将断点打在非main包上,使用 b package.func 会出现如下提示:
Make breakpoint pending on future shared library load? (y or [n])
这时候只能使用 b filename:line 了,而且需要完整路径,例如:

(gdb) b /home/yourihua/workplace/rhino/src/github.com/robfig/revel/revel.go:81
Breakpoint 1 at 0x44eeaf: file /home/yourihua/workplace/rhino/src/github.com/robfig/revel/revel.go, line 81.

为了避免每次都输入完整路径,可以用dir添加搜索路径,如下:

(gdb) dir /home/yourihua/workplace/rhino/src/github.com/robfig/revel/
Source directories searched: /home/yourihua/workplace/rhino/src/github.com/robfig/revel:$cdir:$cwd
(gdb) b revel.go:86
Breakpoint 2 at 0x44ef60: file /home/yourihua/workplace/rhino/src/github.com/robfig/revel/revel.go, line 86.

4. 不错的文章:Introduction to Go Debugging with GDB,地址:http://lincolnloop.com/blog/2012/oct/3/introduction-go-debugging-gdb/

5. 关闭GDB时,发现未退出应用程序:

a. 查找被占用的端口
netstat -tln
netstat -tln | grep 8060
netstat -tln 查看端口使用情况,而 netstat -tln | grep 8060 则是只查看端口8060的使用情况
b. 查看端口属于哪个程序?端口被哪个进程占用
lsof -i:8060

yourihua@ubuntu:~$ lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
revel 24739 yourihua 8u IPv6 576421 0t0 TCP *:9000 (LISTEN)
yourihua@ubuntu:~$

c.杀掉占用端口的进程 根据pid杀掉
kill -9 进程id
kill -9 24739

最后,感谢yuhen的热心帮助。

本文来自:Rhino 的博客

感谢作者:Rhino(犀牛)

查看原文:GDB调试Go程序若干问题备忘

入群交流(和以上内容无关):加入Go大咖交流群,免费领全套学习资料或添加微信:muxilin131420 备注:入群;或加QQ群:729884609

2043 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传