上次我们提到,没有源代码而且没有调试符号,我们也可以 Debug。有人可能会问,我什么时候需要在这种情况下调试吗?!
是的。比方说,我们用了某些第三方的组件,这些组件里面难免也会有 Bug。就算是微软发布的 .net 组件,我们在某些个别的例子中发现了 Bug。就算这些人家的组件都没有问题,有时候我们也不得不在程序运行到组件中的某些语句时候查看一些数据。
举个栗子:我们的程序用了某个组件A。当用户鼠标单击A的一个窗口的时候,A的某个方法应该回掉我们的一个方法。可是它竟然没有(我们在自己的方法上加了断点,没有被击中)!如果我们在这个时候能够给组件中点击事件的处理函数加上断点,我们就可以探一探究竟了。
下面我们就从易到难来看看如何调试别人家的组件。
我们先来看如何调试 .NET Framework 的组件。
1. 我们对 VS 的 Options -> Debugging -> General 做一些配置,如下图:
2. 我们要缓存 .NET 的调试符号, 到 Options -> Debugging -> Symbols, 设置 Cache symbols in this directory 到一个本地的路径。
配置完成,我们来做个实验。我们知道每个 WPF 的窗口的构造函数内都会调用一个 InitializeComponent() 方法。我们今天想看看这个方法它到底干了什么。基于以上两点配置,我们新建一个 WPF 程序,然后给这个方法设断点,当程序运行到该语句时,我们点击F11,哈,我们就进入了微软的代码,请看:
是不是感觉很酷?
调试第三方的组件
这个我们要分几种情况来看:
A. 第三方提供了调试符号
这种情况最简单。基于我们以上的设置,我们只需要把调试符号放到这些组建相同的目录下即可。放到别处也可以,我们需要 VS 的 Options -> Debugging -> Symbols 添加一个新的 Symbol file location,然后开始我们的调试。
B. 第三方没有提供调试符号,但代码发布时没有扰码
这种情况也比较好办。市场上有很多的反编译工具,免费的就有不少比方说 JustDecompile,dotPeek 等。他们不仅能反编译,还能产生调试符号,以便我们进行调试。举个例子,我用 JustDecompile 打开了 log4net.dll(请点击 Generate PDB):
有了调试符号,我们要做的就跟情况A一样了。
C. 第三方没有提供调试符号,但代码发布时扰码了
这种情况比较难办。我们的目标还是一样的,需要有没有扰码的组件及调试符号。余下的都是一样的。市场上有没有反扰码的工具呢?有,还有开源的呢。今天就告诉大家一个,名叫 de4dot,这个项目在 GitHub 的地址是:https://github.com/0xd4d/de4dot. 通过这个工具,我们可以把扰码后生成的组件变成非扰码的组建。剩下的还要做什么,相信大家都知道了吧(参考情况B)?
可惜的是,对于深度扰码的组件,我们就需要更高级的反扰码工具。当然,我们也不需要这么做。情况C我们只会在极端情况下才会面对,对吧?
哈哈,今天就到这里啦!
 

Visual Studio 调试技巧 (三) -- 调试第三方组件代码的更多相关文章

  1. Visual Studio使用技巧,创建自己的代码片段

    1.代码片段的使用示例 在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个 for(int i = 0; i < length;i++) { } ...

  2. 2.[WP Developer体验Andriod开发]Andriod Studio结合Visual Studio Emulator for Android调试Android App

    0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了. 说到开发就绕不开调试程序,调试Android App我们有2种选 ...

  3. 2.[Andriod]Andriod Studio结合Visual Studio Emulator for Android调试Android App

    0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了. 说到开发就绕不开调试程序,调试Android App我们有2种选 ...

  4. Visual Studio 2017 通过SSH 调试Linux 上.NET Core

    Visual Studio 2017 通过SSH 调试Linux 上.NET Core 应用程序. 本文环境 开发环境:Win10 x64 Visual Studio 2017 部署环境:Ubuntu ...

  5. Visual Studio 2010无法启动调试

    现象:Visual Studio 2010点击调试或者按F5.Visual Studio 2010没有什么反应,但又不报错. 而点击运行不调试(Ctrl+F5)却没有问题. 解决的方法:打开项目属性, ...

  6. Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法

    参考:Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法 Vs2012的下载地址: https://msdn.microsoft.com/en ...

  7. 【转】Visual Studio 非常实用的调试技巧

    下面有从浅入深的6个问题,您可以尝试回答一下 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入 ...

  8. 在Visual Studio中快速启动调试Web应用程序

    原文:http://blog.csdn.net/effun/article/details/2638535 到2005,Visual Studio在启动调试的功能上进行了一些改善,不过因为只是简单的一 ...

  9. 开发者说 | 使用Visual Studio Code编译、调试Apollo项目

    转载地址:https://mp.weixin.qq.com/s?__biz=MzI1NjkxOTMyNQ==&mid=2247484266&idx=1&sn=d6bcd4842 ...

  10. VS2015--win32project配置的一些想法之在 Visual Studio 2015 中进行调试的同一时候分析性能

    出处: https://msdn.microsoft.com/zh-cn/magazine/dn973013(en-us).aspx 很多开发商花了绝大多数时间获取应用程序才干正常发挥作用.更少的时间 ...

随机推荐

  1. python manage.py shell之后的一些错误:

    1. 在执行python manage.py shell之后的一些错误: wyl@wyl:~/myobject$ python manage.py shell /usr/lib/python2.7/d ...

  2. bzoj 1455: 罗马游戏 左偏树+并查集

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 668  Solved: 247[Submit][Status] Descriptio ...

  3. 【网络流24题】No.18 分配问题 (二分图最佳匹配 费用流|KM)

    [题意] 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为 cij . 试设计一个将n 件工作分配给 n 个人做的分配方案, 使产生的总效益最大. 输入文件示例input. ...

  4. 【BZOJ 2693】jzptab(莫比乌斯+分块)

    2693: jzptab Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample I ...

  5. Ubuntu apt-get 更换源,以提高下载速度

    http://blog.csdn.net/gaojinshan/article/details/9244823 Ubuntu的默认源是美国的,所以下载起来特别慢,作为天朝的用户,自然要更换为天朝的源了 ...

  6. [OJ] Search for a Range

    LintCode 61. Search for a Range (Medium) LeetCode 34. Search for a Range (Medium) class Solution { p ...

  7. IPVS实现分析

    IPVS实现分析 IPVS实现分析 根据LVS官方网站的介绍,LVS支持三种负载均衡模式:NAT,tunnel和direct routing(DR). NAT是通用模式,所有交互数据必须通过均衡器:后 ...

  8. Learning WCF Chapter2 Service Description

    While messaging protocols are responsible for message serialization formats,there must be a way to c ...

  9. bzoj2285

    完全是为了拼凑才出出来的吧先分数规划求出到基地入口的最小安全系数然后再最小点权覆盖集,只不过这里是带一定精度实数的流,其实是一样的 ; eps=0.001; type way=record po,ne ...

  10. 关于启动Visual Studio 2010 旗舰版的几个错误的解决方法。

    关于启动Visual Studio 2010 旗舰版的几个错误的解决方法.亲测. 重做系统之后,今天是第一次打开Visual Studio 2010 旗舰版码代码,结果遇到几个弹出的对话框,现在与大家 ...