2011年10月26日 星期三

分析大型專案程式碼的方法(How to trace the source code of a big project)


要如何Trace一個數百萬行的程式呢? 這是一個好問題

在幾十萬行甚至數百萬行的程式,是不可能一行一行去Trace code
我們也不需要去瞭解code每一行的意思
這時候工具就很重要了

我們最重要要知道的事就是整個系統的流程,這點可以利用GDB來觀察


整個分析系統的方式分為三個步驟

1.觀察
  一開始利用GDB執行程式,並隨意操作系統
  這時候可以觀察debug訊息以及thread的狀態
  根據印出來的訊息,在適當的地方觀察系統流程和架構

2.適度修改
  適度修改是說在run time的時候利用GDB修改執行的程式
  避免用editor直接修改code
  可以把GDB當成是Interpreter來用,設定中斷點把某一行code換掉
  甚至可以直接修改記憶體內容。修改完之後觀察執行結果是否如我們猜測的一樣
  這邊可以利用GDB提供的資訊,比如說call stack、變數內容、變數type進行分析
  直到瞭解系統整個流程為止

3.擴充
  幫這個系統加入一些新的功能,同樣的我們不需要用editor修改code
  只要透過GDB在run time時候修改code即可
  當你可以為一個系統加入新功能的時候,大概就瞭解整個系統八九成了


4.驗證的macro
  在GDB當中可以加入驗證你程式正確性的macro
  大部分open source專案(比如說Apache)都會提供GDB macro讓你驗證程式
  你也可以自行撰寫macro來自動驗證你修改的程式是否正確


另外盡量不要使用GUI的GDB
原因有兩個

1.GUI的GDB往往都不是最新版本的GDB,沒辦法用一些新的功能
2.在有些情況下X-window會整個爛掉,比如說開發一個新的輸入法

沒有留言:

張貼留言