您可以使用Reflector获取应用程序的源代码,然后使用该源代码进行调试吗?

时间:2008-09-20 04:42:28

标签: .net debugging reflector

似乎你可以使用Relector和Debugger的mashup来调试任何.NET应用程序,而不需要源代码。这可能吗?有没有人见过这个?

7 个答案:

答案 0 :(得分:5)

Reflector的Deblector插件允许您直接从Reflector进行调试。

答案 1 :(得分:4)

很久以前我试过这个没有成功。从那时起,Reflector已经有了很多改进,所以我想今天可能会有所改善。

如果你想一想,这实际上有点吓人。有人可以反编译你的应用程序并获得完整的代码,然后修改它并分发它们自己的版本。一切都没有开源。但那又是“他们”造成混淆器的原因。

答案 2 :(得分:3)

我找不到链接,但是有人确实使用反射器源来编译可以逐步完成的1.1框架的调试版本。我尝试使用2.0框架并发现太多错误,以使其值得我这么做。

如果你想尝试使用像FileDisassembler这样的插件。在我对此的简短经验中,我发现有一些错误需要修复,但并不坏。

对于中小型库,这种方法应该非常可行。

答案 3 :(得分:3)

Reflector Pro可以让你做到这一点!

答案 4 :(得分:1)

不,您需要属于您尝试调试的应用程序的符号文件(.PDB)文件。

Reflector允许您从IL转到可读的.NET代码,但它只保留了开发人员编写的确切代码的含义。因此,即使你有PDB和Reflector的源代码,也无法进行调试。

我想您可以使用反射器的源输出来创建.NET项目并生成您想要调试的自己的程序集版本。这实际上是一个真正的痛苦,但在.NET框架的情况下,Microsoft发布调试信息供任何感兴趣的人使用。

我记得有一次在Reflector中有一个用于调试的插件,但我永远无法让它工作。

Configuring Visual Studio to Debug .NET Framework Source Code
MSDN: PDB Files

答案 5 :(得分:1)

我见过它并且之前完成过。我用它向我的老板证明我们的应用程序并没有像他想象的那样受到保护。拿了一个DLL,得到了源代码,并且bam - 他几乎心脏病发作。

有些情况下.Net Reflector会崩溃,但很难这样做 - 我知道因为我已经积极尝试过。好的混淆器会使代码变得难以管理/不可读(比如重载“a”函数以根据参数做出大量不同的thigns)看到源代码对你没有好处,但你仍然可以调试 - 祝你好运发生了什么事。

答案 6 :(得分:0)

在更大的更复杂的应用程序中,这是可能的,但不是很实用,特别是当使用了许多更新的结构,如lambdas和初始化程序时(你得到一大堆包含美元符号的变量名称,如CS $ 4 $ 0000必须是手动修复)。即使是简单的switch语句也会导致一些非常丑陋的spaghetti代码在Reflector中充满goto语句。

我已经有更多的运气退出MSIL并在调试模式下重新编译。然后,您可以在IL文件中放置断点并使用VS中的所有常用调试器功能。 MSIL起初看起来有点吓人但你很快就掌握了它。

这篇优秀的文章解释了如何做到这一点: http://www.codeproject.com/KB/dotnet/Debug_Framework_Classes.aspx