使用windbg的一些總結以及VS調試多線程時的freeze------以及depends的一些使用

一。用windbg遠程調試源碼

TeamViewer版本需要與遠程機器上一致。

windbg版本使用x64的。因爲x64可以用於win32的程序也可以用於x64的程序,反過來就不能了。

把要調試的dll、EXE、pdb、以及源碼統一找出來,最好放到一個文件夾裏面統一考到遠程機器上,方便查看。

把需要替換的dll、EXE、pdb拷貝到遠程機器上面的運行目錄中。

打開windbg,輸入symbol filepath(就是遠程機器程序的運行目錄,一般的所有運行dll都放在該目錄下)

                      輸入source filepath(就是我們拷貝過去的源文件)

在打斷點的時候,遇到這個問題:Debugee must be stopped before breakpoints can be modified.

解決辦法:需要先attach 到exe再打斷點!!!!!!!!

打斷點按F9,取消斷點再按一次F9。然後你要點擊exe的時候會發現界面動不了,按一下F10就可以了,還有F5也可以按一下。

然後就是和VS一樣的調試步驟了。

 

其他窗口界面的使用

local窗口:相當於VS的output窗口,可以在裏面看到各種對象的具體值。

使用windbg出現的問題

1. 把我要調試的dll替換到遠程機器上發現起不起來了。

   這個時候可以懷疑是不是版本不對,有些dll是動態加載,缺少了其他庫也是起不來的。這時候需要用depends查看一下這個依賴哪些庫,把這個庫都拷過去就可以解決這個問題。

2. 首先我想調試A.dll的時候不知道該掛哪一個exe.

    這個問題只好一個個去源碼裏面找了。

3.打不了斷點。

   首先報錯是找不到pdf, 利用lmvm + (模塊名不加後綴)【比如:lmvm AMFSProxyDll】然後看看是否加載了這個庫。如果對應的symbol路徑沒錯的話,是可以加上的。如果沒有加上,說明這個exe根本就沒有調用這個dll.

二。VS多線程的freeze操作

這個主要是用在多個線程裏面,比如兩個線程之間回調,斷點會跳來跳去不方便調試,就需要把其中一個線程freeze起來,調一個線程,方便查看。

 

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