爲了調試個人指針LCT……我學會了如何使用gdb!sass
粘一個經常使用命令表(原文地址:http://www.javashuo.com/article/p-kmzklxzh-gn.html)函數
gcc -g main.c //在目標文件加入源代碼的信息
gdb a.out.net
(gdb) start //開始調試
(gdb) n //一條一條執行
(gdb) step/s //執行下一條,若是函數進入函數
(gdb) backtrace/bt //查看函數調用棧幀
(gdb) info/i locals //查看當前棧幀局部變量
(gdb) frame/f //選擇棧幀,再查看局部變量
(gdb) print/p //打印變量的值
(gdb) finish //運行到當前函數返回
(gdb) set var sum=0 //修改變量值
(gdb) list/l 行號或函數名 //列出源碼
(gdb) display/undisplay sum //每次停下顯示變量的值/取消跟蹤
(gdb) break/b 行號或函數名 //設置斷點
(gdb) continue/c //連續運行
(gdb) info/i breakpoints //查看已經設置的斷點
(gdb) delete breakpoints 2 //刪除某個斷點
(gdb) disable/enable breakpoints 3 //禁用/啓用某個斷點
(gdb) break 9 if sum != 0 //知足條件才激活斷點
(gdb) run/r //從新從程序開頭連續執行
(gdb) watch input[4] //設置觀察點
(gdb) info/i watchpoints //查看設置的觀察點
(gdb) x/7b input //打印存儲器內容,b--每一個字節一組,7--7組
(gdb) disassemble //反彙編當前函數或指定函數
(gdb) si // 一條指令一條指令調試 而 s 是一行一行代碼
(gdb) info registers // 顯示全部寄存器的當前值
(gdb) x/20 $esp //查看內存中開始的20個數指針