上次我们提到,没有源代码而且没有调试符号,我们也可以 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中编写一个 for(int i = 0; i < length;i++) { } ...

2&period;&lbrack;Andriod&rsqb;Andriod Studio结合Visual Studio Emulator for Android调试Android App

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

Visual Studio 2017 通过SSH 调试Linux 上&period;NET Core

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

Visual Studio 2010无法启动调试

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

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

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

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

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

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

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

开发者说 &vert; 使用Visual Studio Code编译、调试Apollo项目

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

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

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

随机推荐

Lucene&sol;Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)

一.为何开博客写 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...

Greedy&colon;Protecting the Flowers&lpar;POJ 3262&rpar;

保护花朵 题目大意:就是农夫有很多头牛在践踏花朵,这些牛每分钟破坏D朵花,农夫需要把这些牛一只一只运回去,这些牛各自离牛棚都有T的路程(有往返,而且往返的时候这只牛不会再破坏花),问怎么运才能使被践踏 ...

iOS指纹识别

#import "ViewController.h" #import @inte ...

Long,String类型的两个值进行比较,注意点!!!

一: . Long 类型指的是 java.util.Lang 对象,而不是基本类型 long (注意大小写)Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内存地址,也就是比较两个对象 ...

EF连接MySQL数据Web&period;Config配置

EF连接MySQL数据Web.Config配置 <?xml version="1.0" encoding="utf-8"?>

wamp5中的apache不能启动,80端口被占用

在wamp中apache中的httpd.conf文件中 端口文件设置为8080 #Listen 12.34.56.78:8080Listen 8080

kali linux 网络渗透测试学习笔记(一)Nmap工具进行端口扫描

一.利用Nmap扫描网站服务器的端口开放情况 首先打开我们的kali linux才做系统,再打开其命令行模式,输入:nmap www.csdn.net 如下图所示: 因此,通过这个结果可以表明csdn ...

Java for-each循环解惑

Java for-each循环解惑 2014/04/24 | 分类: 技术之外 | 0 条评论 | 标签: JAVA 分享到:21 本文由 ImportNew - liqing 翻译自 javarev ...

zepto中的touch库与fastclick

1. touch库实现了什么和引入背景 click事件在移动端上会有 300ms 的延迟,同时因为需要 长按 , 双触击 等富交互,所以我们通常都会引入类似 zepto 这样的库.zepto 中tou ...

关于Spring中,定时任务执行两次的解决办法

原因:如果spring-quartz.xml文件,在Spring的配置文件spring-config.xml中被加载,那么定时任务会被Spring和SpringMVC扫描两次,所以会被执行两次. 解决 ...

android studio 扰码,Visual Studio 调试技巧 (三) -- 调试第三方组件代码相关推荐

  1. vs2015 支持Android arm neon Introducing Visual Studio’s Emulator for Android

    visual studio 2015支持Android开发了. Microsoft released Visual Studio 2015 Preview this week and with it ...

  2. Visual Studio Code vs. Visual Studio:该怎么选?

    [51CTO.com快译]几十年来,我在上午工作时,会启动微软Visual Studio(或其前身之一,比如Visual C ++或Visual InterDev),然后在它启动过程中泡杯茶,还可能去 ...

  3. Measurement Studio 2019 for Visual Studio 2019

    简介 NI Measurement Studio 是为Visual Studio .NET环境提供的一个集成式套件,包括各种常用的测量和自动化控件.工具和类库.NI Measurement Studi ...

  4. Visual Studio Code和Visual Studio有什么区别?

    本文翻译自:What are the differences between Visual Studio Code and Visual Studio? 微软最近发布了Visual Studio Co ...

  5. IDE之Visual Studio Code:Visual Studio Code的简介、安装、使用方法之详细攻略

    IDE之Visual Studio Code:Visual Studio Code的简介.安装.使用方法之详细攻略 目录 Visual Studio Code的简介 Visual Studio Cod ...

  6. 【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析

    [Android SDM660源码分析]- 02 - UEFI XBL QcomChargerApp充电流程代码分析 一.加载 UEFI 默认应用程序 1.1 LaunchDefaultBDSApps ...

  7. 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )

    文章目录 I . JNI 与 NDK 区别 II . Visual Studio 编译动态库 III. 配置 导入 jni.h 头文件 IV . IntelliJ IDEA Community Edi ...

  8. 【C++】Visual Studio教程(四) - Visual Studio其它功能

    00. 目录 文章目录 00. 目录 01. 模块化安装 02. 创建 Azure 云启用应用 03. 创建 web 应用 04. 生成跨平台应用和游戏 05. 连接到数据库 06. 调试.测试和改进 ...

  9. python class tynu()_Visual Studio Express | Teraz Visual Studio Community

    Program Visual Studio 2019 jest teraz dostępny Dostosowany instalator Twórz aplikacje w technologiac ...

最新文章

  1. 全球最大AI巨量模型,参数2457亿炼丹16天专注中文,打造者绝对让你意外
  2. delphi ---break,exit,continue等跳出操作的区别
  3. [HDOJ1016]Prime Ring Problem
  4. 如何用python进行相关性分析_如何在python中检查连续变量和分类变量之间的相关性?...
  5. 如何自动修复XP/VISTA/WIN7系统引导的工具(NTBootAutofix 2.02)
  6. c++输入错误重新输入_C程序-根据时长和时薪计算工资1.3(解决输入非数字选项退出的bug)...
  7. 并行算法第一讲:概念及目标
  8. 第7章 随机扭动的曲线(《Python趣味创意编程》教学视频)
  9. 9-Shell的逻辑操作符知识介绍-实践及企业案例脚本剖析
  10. 能被3整除的Fibonacci的下标号
  11. PHPMailer 报错:SMTP ERROR: Failed to connect to server: (0)
  12. SSM框架的详细介绍
  13. 微信小程序云数据库使用讲解
  14. Js word格式doc文件下载
  15. 如何从ST官网下载STM32标准库
  16. 阿里云API请求签名失败的解决办法
  17. 迪文T5-T5L使用测试笔记1
  18. Lombok 插件安装、使用
  19. BOM(浏览器模型)
  20. 激光雷达学习笔记-------Ubuntu 18.04 + 思岚科技 A1M8+ ROS 上手使用及基于hector_slam 建图

热门文章

  1. badger mremap size mismatch数据库异常
  2. 大数据时代下的贝叶斯公式
  3. Windows 10 安装STF
  4. 简明 CSS2.1 参考手册
  5. 打小都说我聪明,自从学了Linux,我才如梦初醒
  6. 【数据库视频】报表服务
  7. 标签上 title 与 alt 属性的区别是什么?
  8. JCD 驱动 - 复杂系统设计应对之道
  9. java spider爬虫_Java网络爬虫实操(2)
  10. 手机到底应该选128G还是64G内存呢?其实很多人都选错了