在调试时隐藏DLL中的代码

时间:2013-07-05 08:08:13

标签: c# .net vb.net visual-studio

我已经创建了一个带有类库项目的DLL。当在另一个项目和调试中添加此DLL作为引用时,当逐步执行或当类返回Exception时,将显示该类中的代码。

我该如何隐藏这个?我希望异常显示在类指令上,而不是在内部,并允许查看代码。并且当按步骤进行调试时,我想要在不执行方法代码的情况下执行这些方法。

就像您单步执行str.Split()一样。您没有看到代码和所有步骤。您只需在该行上看到错误或跳转到下一行。

例如:

Dim myObj As New myClass.SomeObj()

myObj.MyMethod()

我不希望显示MyMethod内的代码。

2 个答案:

答案 0 :(得分:4)

在指定的方法上添加DebuggerStepThrough属性以防止步入。如果发生异常,调试器会在方法调用中断开,而不是在方法内部。 See MSDN

答案 1 :(得分:2)

您描述的行为是一种便利。它允许调用者通过查看他尝试使用的代码的详细信息来查看确切的错误。 Microsoft even supports this for the .NET Framework source,在我看来它非常有用。我不确定你为什么要禁用它。在调试时,您总是可以使用 F10 (Step Over)而不是 F11 (Step Into),这样DLL的代码在您需要时仍然可用。

但是如果您确定不希望能够从DLL中进入任何代码,则需要确保客户端应用程序无法使用调试符号。 Visual Studio以a PDB file的形式生成这些符号,其中包含源文件的位置以及生成的代码和源代码行之间的映射。

与其他一些答案相反,调试符号的生成与代码是否被优化无关(例如,“发布”版本)。 I've written about this before在您可能需要符号进行优化构建的上下文中,但重点是这些是两个正交设置。您可以打开优化并关闭符号生成,反之亦然。我只想说我强烈建议为所有版本生成调试符号。

您可以在项目属性中禁用调试符号的生成(它隐藏在“高级...”按钮下),或者您可以移动PDB文件以确保客户端应用程序在调试时无法找到它们。默认情况下,构建将它们放在与二进制输出相同的目录中,以便在添加对DLL的引用时,Visual Studio可以轻松地找到它们。如果移动符号或二进制文件,它将无法找到它们。 (调试器也会搜索符号路径,但您的符号可能不会在那里结束。)