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對進程的控制),在這個命令執行之后,你所調試的那個進程將繼續運行。