HTML5技术

.Net,Dll扫盲篇,如何在VS中调试已经编译好的dll? - 小曾看世界

字号+ 作者:H5之家 来源:H5之家 2017-08-20 12:02 我要评论( )

什么是Dll? DLL 是一个包含可由多个程序同时使用的代码和数据的库。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该Dll中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。 通

什么是Dll? DLL 是一个包含可由多个程序同时使用的代码和数据的库。 例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该Dll中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。
通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。
通俗来讲,一个项目由多个模块组成。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载,而更新的话,就只需替换掉当前的DLL就行了.


如何制作Dll? 在以.net的开发为例,在当前编译环境下,只需要对当前想要制作成dll的项目右键重新生成下,然后在该项目对应的文件夹下面找到debug文件夹,里面就会有一个与当前项目名称一样的后缀为dll的文件。
Dll怎么用?
首先先在项目中引用该dll,然后在用到dll的地方using一下,即可调用其中的类与方法。因为是dll,所以你F12进去一般都是这样的:

可以看到该类既不是抽象类也没有继承任何接口和类,但是方法体却没有实现,而最上面 有写xx程序集之类。
你可以通过vs的对象浏览器看看里面都是啥结构,但是你是看不到方法里面的代码的,也无法调试。 怎么查看dll的代码? 你想了解这些dll中的代码实现,但是你看不到。但是,你想到的,前人早想到了。那么我们换个说法,之所以你看不到被编译好的dll中的代码,那是因为vs编译器本身不带这个功能。
那么,我们找一款工具来辅助我们来看看这个dll中的代码。
这个实现过程,叫 反编译。
那么,自然,我们要用的就是 反编译软件。
当下知名的反编译软件有 Il spy,.NET Reflector
这两个软件我比较喜欢用IL SPY,因为网上有中文版的。
放图:

如果你想查看特定的dll的话,可以点击文件选项卡,然后点击打开,然后找到dll路径就可以了(.NET Reflector也一样)。
工具很方便,有很多功能,具体教程,大家自行百度。 怎么去在vs实际开发项目中调试dll中的代码? 如果光是看看源码可不够,还想在项目中实际调试怎么办?那么我告诉你,只有一个工具可以满足。
那就是 .NET Reflector的vs插件。 .NET Reflector是个反编译的软件,但如果你想即时调试dll的代码的话,还需再用其vs的插件。 .NET Reflector和.NET Reflector的vs插件是两个概念,不懂的话请自行百度 什么是vs插件。
接下来我教大家怎样安装并使用这个插件。
首先,点击工具,点击扩展和更新

然后点击 联机,并在最右侧的搜索框中 搜索 Reflector

最后,选中第一个,点击安装即可。
目前最新版本9.2
安装完成,vs中就会多了个选项卡。

给大家介绍下,.NET Reflector Object Browser是 .net反射对象浏览器,这个是用来控制.net反射对象浏览器 显示及隐藏的。 .net反射对象浏览器长这样:

这个.net反射对象浏览器 你可以浏览当前.net框架默认的程序集, 你可以一层一层点开,最终点到你想要看的类里面。

但是,这样做只能看到源码,并不能调试。

还需要在该dll右键,点击选中Enable Debugging,意思就是将该dll启动到可调试的状态。当你点击该选项的时候,这个插件会把这个dll的代码给转成本地的文件,.NET Reflector首先会尝试定位本机上的PDB文件,如果没有则会自己创建PDB文件,这才能进行调试。

点击后会出现一个界面,这个界面就是当前状态改变的过程。

成功后是这样的:

直接点Done关闭掉就可以。

接下来我们就可以打断点调试了!

选中断点,然后按照你喜欢的方式去调试!F5或者附加进程都可以。

为什么有的代码无法调试?

有的时候,你即便打了断点,可发现怎么也调试不进去。

原因有很多可能,包括条件编译、编译器优化结果、目标体系结构等不同,总之,你不能调试。

接下来我要放一张.Net Reflector反编译的代码,和一张IL SPY反编译的代码。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署 - 王杰光

    升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署 - 王杰

    2017-08-18 10:01

  • .Net大局观(2).NET Core 2.0 特性介绍和使用指南 - L.P.Y

    .Net大局观(2).NET Core 2.0 特性介绍和使用指南 - L.P.Y

    2017-08-17 17:01

  • 从.net到java,记录下这三个月的工作 - _liuxx

    从.net到java,记录下这三个月的工作 - _liuxx

    2017-08-09 15:01

  • 整理自己的.net工具库 - 缺水的水瓶座

    整理自己的.net工具库 - 缺水的水瓶座

    2017-08-07 17:03

网友点评
t