簡單總結常用gdb調試命令
不長篇討論gdb是什麼,或者怎麼使用了,因爲網上很多都講的比較詳細,以下只是做個備錄,經常使用的命令,偶爾不用容易忘記!
1.set args xxxx (xxx爲參數)
2.r (run 運行程序)
3.n (next 是在單步執行時,在函數內遇到子函數時不會進入子函數內單步執行,而是將子函數整個執行完再停止,也就是把子函數整個作爲一步)
4.s (step 同樣是單步執行,但是遇到子函數就進入並且繼續單步執行)
5.finish (當s進入某個函數調試,finish就是結束該函數,繼續調試)
5.b (break point打斷點,如:b main 即在main主函數打了一個斷點)
6.d (delete 刪除某個斷點,如:d 1 刪除第一個斷點或者delete 1意思一樣)
7.p (print 打印,如:p a 即打印a的值,前面可以加上如/x 、/u、/f、等, => p /x a即打印的是16進制等等)
8.p &a (打印a的地址)
9.c (continue) 執行到下一個斷點或程序結束
10.info threads 查看當前線程調試信息
11.bt (backtrace) 查看所有調用棧信息
12.info breakpoints 查看斷點處信息(info 查看信息 info 查看幫助可以看到還有很多命令)
13. i locals 顯示所有當前調用棧的所有變量
14.x (examine 檢查,如x/3uh 0x58090A9C,就是打印地址 0x58090A9C,3個單位雙字節無符號數,3代表3個單位,u代表無符號數,h代表以雙字節爲一個單位) 檢查某一個地址附近內容
15.disassemble 查看當前函數彙編信息(如:disassemble /rm /m指示顯示彙編指令的同時,顯示相應的程序源碼;/r指示顯示十六進制的計算機指令(raw instruction))
設置core環境
ulimit -a 查看默認參數
ulimit -c 查看core dump文件是否打開,如果顯示爲0,則沒有打開,顯示爲unlimited,則代表core dump 文件打開了
ulimit -c 1024 設置core文件大小爲1024
ulimit -c unlimited 打開系統開關,讓其可以在程序crash的時候生成core文件。多線程如果dump,多爲段錯誤,一般都涉及內存非法讀寫。
ulimit -c 0 關閉core dump系統開關
假設生成core dump文件爲core.11493,調試直接爲gdb + 進程名+ core.11493,其它和gdb調試步驟一樣