5

我创建了一个带有一些类的类库项目的 DLL。在将这个 DLL 作为引用添加到另一个项目和调试时,当逐步进行或当类返回异常时,会显示该类的代码。

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

就像如果你通过str.Split(),例如。您看不到代码和所有步骤。您只会在该行看到错误或跳到下一行。

例如:

Dim myObj As New myClass.SomeObj()

myObj.MyMethod()

我不希望显示里面的代码MyMethod

4

2 回答 2

4

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

于 2013-07-05T08:16:59.130 回答
2

您描述的行为是一种方便。它允许调用者通过查看他尝试使用的代码的详细信息来准确地看到出了什么问题。Microsoft 甚至在 .NET Framework 源代码中也支持此功能,我认为它非常有用。我不确定你为什么要禁用它。在调试时,您始终可以只使用F10(Step Over) 而不是F11(Step Into),以便 DLL 的代码在您需要时仍然可用。

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

与其他一些答案相反,调试符号的生成与代码是否经过优化(例如,“发布”构建)无关。我之前已经写过关于为什么你可能需要符号来优化构建的上下文,但重点是这是两个正交设置。您可以打开优化并关闭符号生成,反之亦然。我只想说我强烈建议为所有构建生成调试符号。

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

于 2013-07-05T08:24:19.823 回答