gdb [options] --args executable-file [inferior-arguments ...]
- l - 相当于list命令,l 37 显示37行附近的源码
- b 行号,b 37 if i==3
- b 函数名.函数名
- i b - 查看全部断点信息
- d - 删除所有断点
- d 0 - 删除第0个断点
- display a - 一直显示a的值
- undisplay - 去掉所有显示
- watch addr - 监控addr内存
- s - step的意思进入函数进行跟踪
- j 37 - 直接跳到37行运行
- u - 将循环执行完
- p a - 打印a的值
- p a=3 - 设置a的值,p (*(mystruct *)addr) 打印一个数据结构,addr为其地址
- r - 运行程序到断点
- n - next的意思继续执行下一条语句
- c - continue的意思,继续执行跳过当前断点, c 3 忽略3次断点
- bt - 查看函数堆栈
- where - 查看堆栈信息
- up - 回溯一层堆栈
- down - 到下一层堆栈
- shell - 进入shell,如果再exit会回到gdb, shell echo $env
- enable n - 开启第n个断点
- disable n - 禁用第n个断点
- finish - 执行本函数并返回
- dir - 加目录
关闭GDB时,发现未退出应用程序:
a. 查找被占用的端口
netstat -tln
netstat -tln | grep 8060
netstat -tln 查看端口使用情况,而 netstat -tln | grep 8060 则是只查看端口8060的使用情况
b. 查看端口属于哪个程序?端口被哪个进程占用
lsof -i:8060
lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
revel 24739 yourihua 8u IPv6 576421 0t0 TCP *:9000 (LISTEN)
c.杀掉占用端口的进程 根据pid杀掉
kill -9 进程id
kill -9 24739
目的:使用gdb附加到一个正在运行的进程上,然后做一些调试,并安全退出。
1. 修改Ubuntu配置,允许gdb附加到进程上,如何修改如下:
http://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process
2. 查看进程id #ps ax 或者 #ps au
3. 启动gdb
4. 使用file命令来指定进程所联系的程序源代码和符号表,例如:
file 要附加的源代码目录
5. attach <进程ID>
6. 打断点,如下:
b path/to/app.go:10
7. 输入c,进程继续运行。
8. ctrl + c再次中断,回到gdb命令行,然后输入:deatch。
当你调试结束之后,可以使用该命令断开进程与gdb的连接(结束gdb对进程的控制),在这个命令执行之后,你所调试的那个进程将继续运行。