Linux/Windows 除錯必備工具
這篇文章主要說明當軟體遇到非預期錯誤的時候,
如何運用一些工具與方法在有限的蛛絲馬跡中找出原因。
軟體開發大家都有 Debug 的經驗。這邊討論的 Debug是在沒有程式碼的狀況下,
針對系統與應用程是發生錯誤時的處理。
筆者推薦一些工具集,可以在一些相關的情境下派上用場,協助找到發生問題的原因。
Windows 工具集
提到Windows Troubleshooting 就不得不認識 System Internals,SystemInternals這個原本是部落格,
寫了很多微軟除錯的相關工具,最後被微軟收購,變成微軟的一部分。
https://technet.microsoft.com/en-us/sysinternals
https://live.sysinternals.com/
這上面有許多關於系統的工具,筆者很建議每一個都下載試用看看。
其中有兩個工具一定要認識。分別是 Process Explorer 與 Process Monitor。這兩個工具可以補足 Windows Task Manager 提供額外的資訊。
Process Explorer
https://technet.microsoft.com/en-us/sysinternals/bb896653
這個工具就好比是 Windows 的 Task Manager ,即時”但是提供更多額外的資訊與功能。
實務上有哪些情境可以用到這個工具呢?
- 電腦跑得很慢。到底電腦在做什麼? Disk, Memory 不足 or 哪一個 process 讓 CPU 很忙?
- Process Hang 住。到底那個 process 當下正在幹嘛?
- Application 在記憶體內運作的狀況,可以將特定 application在記憶體內的 User dump 取出
- 安裝失敗。到底是哪個檔案被 lock住?
- 有沒有奇怪的 DLL injection? 例如,非系統認可、沒有公司名稱、非預期的執行檔案路徑
- 哪些服務正在執行?
- 每個 Process 運行的時間,如何被啟動? 。例如有沒有哪種啟動3秒之後就結果?
- 系統資源 I/O, Disk or Processor 占用最多的是誰?
等等問題都可以用Process Explorer得知一二。
Process Explorer最大的缺點就是”即時”。一定發生問題的當下,即時監控,即時分析。
因為 Process Explorer無法像 Windows Events Viewer 那樣錄製歷史紀錄。因此,所有的資訊都是動態且即時。
如果,問題發生經常是在半夜怎麼辦呢? 那就需要下面會介紹的工具 Process Monitor。
Process Monitor
Process Monitor 與 Process Explorer 最大的差異在於 Process Monitor 會動態即時”記錄”每一個活動紀錄。
Process Monitor記錄下來之後,可以提供像 Process Explorer的分析資訊。
另外,Process Monitor 也可以用來紀錄開機整個過程的活動資訊。這是 Process Explorer 絕對做不到的。
Process Monitor缺點:”紀錄”是優點也是缺點。因為紀錄系統所有的資訊,會在短時間內就產生很大的紀錄檔案。
十分鐘內可能會產生出 300MB的紀錄檔。所以這樣的分析,通常會運用在特定時間內。
https://technet.microsoft.com/en-us/sysinternals/bb896645
另外筆者也建議下列工具,可以提供在軟體測試不同情境下使用
電腦最後執行了什麼? LastActivityView
http://www.nirsoft.net/utils/computer_activity_view.html
這個工具就像是醫生問診,生病前的幾天內,發生哪些活動?去哪裡? 吃了什麼?發生什麼異常等。
這個工具可以列出電腦最近執行作了哪些事情。例如執行檔案、開啟檔案、開啟資料夾、開啟軟體、軟體安裝、關機、程式當掉、網路連線或是斷線等。
當有問題發生的時候,這個工具可以提供一些線索,讓我們回推是不是有哪些狀況導致問題發生
藍色畫面分析
BlueScreenView http://www.nirsoft.net/utils/blue_screen_view.html
使用 Windows的使用者都會遇到一個錯誤,就是 BlueScreen
導致 BlueScreen 的原因不外乎是與Windows Kernel mode的執行有非預期的另外錯誤出現。
其實 BlueScreen 上有些資訊是可以告訴我們一些初步錯誤的原因。
可是當 BlueScreen出現的時候,我們要怎樣收集螢幕上的資訊呢? 多半情況我們可能用手機拍下當時的畫面。
這裡介紹的工具 BlueScreenView就是可以分析電腦所儲存的 Blue Screen log還原當時 blueScreen畫面。
怎樣分析 Blue Screen呢? 重點要查看 “Bug Check Code” 。接著根據 Bug Check Code 到 MSDN 查詢進一步的資訊。
每一個 Bug Check Code 都代表著不同的錯誤原因。可以進一步查詢MSDN 得知對應的錯誤原因、建議解決的方法。
https://msdn.microsoft.com/en-us/library/windows/hardware/ff560244(v=vs.85).aspx
Application Crash
另外一個我們經常會遇到的錯誤就是 Crash。應用系統本身發生錯誤導指的異常終止。一般來說會看到下列畫面。
當這樣的情況發生的時候,有沒有什麼工具可以自動讀取相關的 log 並且做初步分析? 這邊我們用的工具就是 “WinCrashReport”
http://www.nirsoft.net/utils/application_crash_report.html
電腦系統修改了什麼
有時候我們會想知道到底特定時間內電腦系統有什麼修改? 或是這次的程式安裝到底改變了電腦什麼?
對電腦來說永久性的改變不外乎是 Files, INI, Registry 的新增、刪除、修改。
這邊要介紹的工具就是 InstallRite
http://www.softpedia.com/get/System/System-Info/InstallRite.shtml#download
Linux 工具集
Linux 內建或是可以安裝許多工具集。這張圖整個說明 Linux 每一部部分可以運用的工具有哪些?