在.Net开发过程中,经常会使用一些没有源码的第三方库,在代码出了问题时,如果怀疑跟该库的内部实现有关,我们该怎么办呢?首先,自然会想到反编译去看看代码或者联系作者,然而,有没有办法让我们在debug时进入这个第三方库,并看看里面在运行时到底发生了什么呢?本文就来介绍三种debug第三方库的办法,希望能够对你有所帮助。
先介绍一下我们的样例代码,下面这段代码比较简单,主要功能:从text.csv文件中读取每行数据并在控制台显示。其中用到的类CsvConfiguration,CsvReader,CsvDataReader来自第三方库CsvHelper,可以通过Nuget下载,这里假设我们想要调试CsvDataReader类的Read方法。完整的代码工程请参考:https://github.com/DerekLoveCC/Writings/tree/master/Article/DebugWithoutSourceCodeInDotNet/code
internal class Program
{
private static void Main(string[] args)
{
using (var textReader = new StreamReader(@".\test.csv"))
{
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
var csvReader = new CsvReader(textReader, config);
var csvDataReader = new CsvDataReader(csvReader);
while (csvDataReader.Read())
{
for (int i = 0; i < csvDataReader.FieldCount; i++)
{
Console.Write(csvDataReader.GetString(i) + " ");
}
Console.WriteLine(" ");
}
}
Console.Read();
}
}
dnSpy构建在ILSpy的基础上,开源免费,不但可以反编译代码而且能够调试,关于dnSpy的更多信息请访问:https://github.com/0xd4d/dnSpy ,下面我们一起来看看具体操作。
总结,dnSpy功能很强大,对于.net的系统库也是可以的,从此调试无忧。此外,dnSpy可以附加到已运行的进程上,但是由于JIT的优化,使得这种方式可能无法获得想要的信息。关于编译优化和运行时优化,咱们以后再聊。
Visual Studio就无需介绍了,dotPeek是大名鼎鼎的JetBrains出品的免费工具,可以到:https://www.jetbrains.com/decompiler/ 下载。这种方法的基本思想就是把dotPeek作为VS的Symbol Server,下面是使用方法:
总结,这种方式的优点是能够使用熟悉的VS
Resharper也是JetBrains的付费产品,使用也很方便,请查看下面步骤:
总结,这种方式可以使用VS,但是Resharper插件可能拖慢VS
原文:https://www.cnblogs.com/dereklovecc/p/13416326.html