一。用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起来,调一个线程,方便查看。