微软 Ubuntu Android nginx Windows linux apache google Python php 云计算 centos shell 程序员 wordpress 开源 Firefox mysql java 编程

调试:gdb

 gdb是GNU發布的一個強大的程序員調試工具。也是Linux程序員不可或缺的一大利器。相比圖形化的IDE調試器,gdb在某些細節上展現出令人羨慕的靈活性。gdb確實擁有圖形化的調試器所不具備的強大特性,這會隨著使用的深入逐步體現出來。本節以一個簡單的實例開頭。最後給出gdb常用的命令表。更詳細的命令選項可以參考gdb手冊。

 在使用gdb調試程序之前,必須首先使用gdb。cc命令生成帶有調試信息的可執行程序,否則調試時看到的將是一堆匯編代碼。

 然後就可以使用gdb命令對生成的二進制文件a.out進行調試了。本例使用的這個程序沒有什麽邏輯錯誤,只是借用來介紹gdb的基本命令。啟動gdb的方法很簡單,將二進制文件作為gdb的參數就可以了。

backtrace(或bt)    查看各級函數調用及參數
finish    連續運行到當前函數返回為止,然後停下來等待命令
frame(或f) 幀編號    選擇棧幀
info(或i) locals    查看當前棧幀局部變量的值
list(或l)    列出源代碼,接著上次的位置往下列,每次列10行
list 行號    列出從第幾行開始的源代碼
list 函數名    列出某個函數的源代碼
next(或n)    執行下一行語句
print(或p)    打印表達式的值,通過表達式可以修改變量的值或者調用函數
quit(或q)    退出gdb調試環境
set var    修改變量的值
start    開始執行程序,停在main函數第一行語句前面等待命令
step(或s)    執行下一行語句,如果有函數調用則進入到函數中


Core dump:Core的意思是內存,Dump的意思是扔出來,堆出來。開發和使用Unix程序時,有時程序莫名其妙的down了,卻沒有任何的提示(有時候會提示core dumped),這時候可以查看一下有沒有形如core.進程號的文件生成,這個文件便是操作系統把程序down掉時的內存內容扔出來生成的, 它可以做為調試程序的參考

延伸阅读

评论