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

上次我们提到,没有源代码而且没有调试符号,我们也可以 Debug。有人可能会问,我什么时候需要在这种情况下调试吗?!

是的。比方说,我们用了某些第三方的组件,这些组件里面难免也会有 Bug。就算是微软发布的 .net 组件,我们在某些个别的例子中发现了 Bug。就算这些人家的组件都没有问题,有时候我们也不得不在程序运行到组件中的某些语句时候查看一些数据。

举个栗子:我们的程序用了某个组件A。当用户鼠标单击A的一个窗口的时候,A的某个方法应该回掉我们的一个方法。可是它竟然没有(我们在自己的方法上加了断点,没有被击中)!如果我们在这个时候能够给组件中点击事件的处理函数加上断点,我们就可以探一探究竟了。

下面我们就从易到难来看看如何调试别人家的组件。

我们先来看如何调试 .NET Framework 的组件。

1. 我们对 VS 的 Options -> Debugging -> General 做一些配置,如下图:

50f77d567711202f02933a9573e42ed5.png

xl56VjA15r

2. 我们要缓存 .NET 的调试符号, 到 Options -> Debugging -> Symbols, 设置 Cache symbols in this directory 到一个本地的路径。

配置完成,我们来做个实验。我们知道每个 WPF 的窗口的构造函数内都会调用一个 InitializeComponent() 方法。我们今天想看看这个方法它到底干了什么。基于以上两点配置,我们新建一个 WPF 程序,然后给这个方法设断点,当程序运行到该语句时,我们点击F11,哈,我们就进入了微软的代码,请看:

db83aa8ea66ed67d84f6551b7224376f.png

xl56VjA15r

是不是感觉很酷?

调试第三方的组件

这个我们要分几种情况来看:

A. 第三方提供了调试符号

这种情况最简单。基于我们以上的设置,我们只需要把调试符号放到这些组建相同的目录下即可。放到别处也可以,我们需要 VS 的 Options -> Debugging -> Symbols 添加一个新的 Symbol file location,然后开始我们的调试。

B. 第三方没有提供调试符号,但代码发布时没有扰码

这种情况也比较好办。市场上有很多的反编译工具,免费的就有不少比方说 JustDecompile,dotPeek 等。他们不仅能反编译,还能产生调试符号,以便我们进行调试。举个例子,我用 JustDecompile 打开了 log4net.dll(请点击 Generate PDB):

e71e0b9b67b71d8bd83c6bacd4db3f47.png

xl56VjA15r

有了调试符号,我们要做的就跟情况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扫描两次,所以会被执行两次. 解决 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值