我正在使用第三方DLL。 在某些特定情况下,DLL中的一个函数会抛出异常。 我能够在Visual Studio中调试DLL吗?
在获得Andrew Rollings的回答后,我可以查看代码,但是否有任何简单的方法在Visual Studio中通过代码进行调试?
我正在使用第三方DLL。 在某些特定情况下,DLL中的一个函数会抛出异常。 我能够在Visual Studio中调试DLL吗?
在获得Andrew Rollings的回答后,我可以查看代码,但是否有任何简单的方法在Visual Studio中通过代码进行调试?
我找到了两种方法:
1) 从使用项目访问DLL项目。 这需要在Visual Studio的不同项目中构建DLL,并通过另一个项目访问DLL(假设您有源代码)。 有多种方法可以实现此目标:
Trace.WriteLine
语句,它们将显示在Visual Studio的“输出”窗口中。System.Diagnostics.Debugger.Break()
语句。当在Visual Studio中运行调用项目时,程序执行将停止在此处。
从这里,您可以访问调用堆栈(包括DLL本身中的所有函数调用)并设置断点(尽管断点图标将显示为禁用状态,而悬停文本的断点将读取“当前不会命中断点。未为此文档加载任何符号”)。System.Diagnostics.Debugger.Break()
一样(参见上面)。2) 将使用进程附加到DLL项目。 这需要将Visual Studio调试器钩入运行中的进程。
对我有用的一些调试第三方库以及 .NET 本身的方法是使用 WinDbg。这是微软提供的一个很棒的调试器,我用它来解决了一些深层次的框架问题。
如果是托管 DLL,你需要使用 Son of Strike (SOS) 扩展。它也可以调试本机代码。你需要了解一些关于调用堆栈和汇编/CIL 指令的知识,才能更好地使用它。你应该能够确定异常以及导致异常的原因。我们曾经使用 WinDbg/SOS 发现,在 HttpWebResponse 中,如果你使用 Gzip 压缩下载页面,而服务器返回了错误的 Gzip 头,.NET 将在线程池中运行解压缩操作,并且可能会导致进程崩溃。祝你调试愉快。
我认为.NET Reflector有一些调试插件。这将是一个更好的想法,因为反编译和重新编译代码通常会失败,并且您需要在代码中进行许多更改才能修复它。
尝试使用.NET Reflector调试器。它可能会对您有很大帮助。
.NET Reflector 6附带了一个Visual Studio插件,让您可以在没有源代码的程序集上使用Visual Studio的逐步调试功能。
请查看此博客文章:
http://www.simple-talk.com/community/blogs/alex/archive/2009/09/22/74919.aspx 以获取更多详细信息。
这仍然是一个非常早期的版本。因此不能保证它会正常工作,并且可能会破坏您的Visual Studio配置或项目配置。确保您对使用此插件的任何项目进行备份(或源代码控制)。
下载链接: http://www.red-gate.com/MessageBoard/viewforum.php?f=109