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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值