【问题标题】:How to use #IF DEBUG in VB.NET如何在 VB.NET 中使用#IF DEBUG
【发布时间】:2010-08-31 21:09:16
【问题描述】:

是否可以从 #IF DEBUG 条件变量中为类变量赋值?

如果我在DEBUG 模式下运行,我想有条件地从我的主表单加载中执行一些代码。我想我可以这样做:

Public Class Form1
    public DEB as Integer

    #if DEBUG then
        DEB = 1
    #else
        DEB = 0
    #end if

    Private Sub Form1_Load(....)
        if DEB=1 Then
            <do something>
        else
            <do something else>
        end if
    ....

但是,您似乎无法为变量赋值。我显然没有正确理解范围。我似乎无法将 #if DEBUG 放入 Load 子例程中。我该怎么做?

【问题讨论】:

    标签: .net vb.net


    【解决方案1】:

    为什么不直接测试编译常量呢?通过测试实际变量,您不会获得任何收益。

    Public Class Form1
    
    Private Sub Form1_Load(....)
    
    #if DEBUG then
        <do something>
    #else 
        <do something else>
    #end if
    
    End Sub
    
    End Class
    

    【讨论】:

    • 好点...但是当我运行它时似乎没有设置 DEBUG。我知道我在调试模式下运行。
    • 想通了...解决方案被定义为“发布”构建,即使该项目被定义为在 DEBUG 中构建。
    • 要检查的另一件事是项目属性 -> 编译 -> 高级编译选项 -> 必须在发布配置中取消选中“定义调试常量”。
    【解决方案2】:

    我在这里看不到您的问题。我这样做并且效果很好。编译常量不能直接用于运行代码,这有点烦人,但仔细想想还是有道理的。

    作为对 Christian 的回应,我认为反对仅将您的代码包含在编译器指令中的情况是,使用代码变量,您可以编写更简洁、更具描述性的代码,而重复可能更少,因此维护更简单。

    例如,这是我的标准库代码:

    Public Module Common
    
        #if DEBUG then
            Public In_Debug As Boolean = True
        #else
            Public In_Debug As Boolean = False
        #end if
    End Module
    
    Public Class Form1
    
        Private Sub Form1_Load(....)
    
            If In_Debug Then SplashScreen.Hide()
            ...
    

    In-Debug 代码变量放在公共模块中可以有效地使其成为一个全局,您可以在整个项目中将其视为常量。

    (示例说明:我不会在调试中显示启动画面,因为它可能会隐藏对话框等可能会阻止您继续进行的操作。)

    显然,您可以对 TRACE 常量或您选择声明的任何自定义编译器常量执行相同的操作。

    而且,是的,正如 GregH 所提到的,您需要确保在项目的 Debug 配置中确实声明了一个 DEBUG 常量(无论它实际上是否称为“调试”)。您不需要在 Release 中声明它;它的缺席被解释为“假”。

    【讨论】:

      【解决方案3】:

      在 VB.NETFramework v4.5 中

      Debugger.IsAttached

      Public DEB As Integer
      If Debugger.IsAttached Then
          DEB = 1
      Else
          DEB = 0
      End If
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        相关资源
        最近更新 更多