一。用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起來,調一個線程,方便查看。