gdb高階除錯方法

查志強發表於2014-06-08

【原文:http://blog.csdn.net/wwwsq/article/details/7086151

1,啟動gdb的時候自動執行指令碼

gdb -x your_script

注意:your_script裡面只能有gdb命令。不過我們都知道gdb命令裡面有個shell指令,所以實際上這裡可以做任何事。


2,除錯執行中的程式

在gdb裡面有個attach指令,可以除錯執行中的程式。

結合上面的-x引數,實際上我們可以寫一個指令碼,自動的attach到我們關心的程式上面,然後自動的做很多事情:比如設定trace命令並且continue。


3,設定條件斷點

break test_func() if x == 5

可以在x == 5 的時候中斷在test_func()裡面


4,在斷點自動執行命令

break test_func() if x == 5

commands

>shell ls

>continue

>end

可以在命中斷點的時候自動執行命令。


5,結合以上各點,我們可以做什麼呢?

我們可以除錯執行中的一個程式,當發現程式嘗試mallc()超過100KB的記憶體塊的時候,就寫一行日誌然後給ops發一封電子郵件。

我們還可以除錯執行中的一個程式,讓這個程式把它的每個細節都列印到日誌裡面去。

我們可以讓這個執行中的程式,在任何條件下執行任何他自己的任何函式。

我們可以讓這個執行中的程式,進行各種跳轉。

簡單的說我們可以控制這個程式,做任何事情。

這基本上是一個C++版的AOP(面向切面程式設計)了。而且更底層、更徹底。


相關文章