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

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程序若干问题备忘

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。