【調試技巧】Windbg常用調試方法

簡介:

當出現進程CPU佔用率高、進程假死(不退出)、進程發生崩潰時,可以參考以下的windbg命令使用說明,進一步提供有價值的信息給開發。

1.進程CPU佔用率高問題跟進方法

1)開啓windbg,attach到對應的進程上
2)加載目標程序PDB和系統PDB:

srv*DownstreamStore*http://msdl.microsoft.com/download/symbols

3)查看所有線程的運行時間

命令: !runaway

這裏寫圖片描述
4)切換至CPU佔用較高的工作線程,如上圖的6號線程

命令: ~6s 

5)查看函數調用棧

命令: kb

這裏寫圖片描述

2.進程不退出並且不佔用CPU時跟進方法

1)開啓windbg,attach到對應的進程上
2)加載目標程序PDB和系統PDB:

srv*DownstreamStore*http://msdl.microsoft.com/download/symbols

3)切換至0號主線程

命令:  ~0s

4)查看主線程的函數調用棧

命令: kb

正常的調用棧一般是:
這裏寫圖片描述
5)如果該線程擁有鎖,使用!cs查看鎖的擁有者

命令: !cs [內存地址]

以上命令會顯示哪個線程擁有鎖owner thread id = 0xXXXX
6)切換至擁有鎖的線程

命令: ~Xs   X代表線程序號

7)查看函數調用棧

命令: kb

3.進程發生崩潰跟進方法

1)開啓windbg,打開對應的dump文件
2)加載目標程序PDB和系統PDB:

srv*DownstreamStore*http://msdl.microsoft.com/download/symbols

3)查看異常分析

命令: !analyze -v

4)切換至崩潰現場

命令: .ecxr

5)查看崩潰調用棧

命令: kb
  1. 當不確定exe或者dll版本時,可以使用lm命令查看詳細信息:
    查看dll的版本號

    Lm vm xxx xxx代表dll或者exe的名稱

  2. 當不確定線程崩潰或假死時,可以使用~*kb查看所有線程的函數調用棧,然後逐個分析可能崩潰或假死的線程。
    查看全部線程信息

    ~*kb

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章