Vb.net 如果语句为true,则End If不会立即继续

Vb.net 如果语句为true,则End If不会立即继续,vb.net,if-statement,Vb.net,If Statement,我在VB.Net End If语句中看到了一些奇怪的行为,当它设置了断点时。当If语句为false时,程序到达End If断点,并在单击continue后继续。如果If语句为true,程序将到达断点,但按continue后不会继续。您必须再次按“继续”。这正常吗?我问这个问题是因为我在调试一个子程序时遇到了麻烦,虽然这可能是我的错,但如果行为是我目前唯一能看到的,我无法解释的事情,那末该怎么办呢。下面的代码在末尾设置了断点If是测试这一点所需的全部,它可以放在任何地方。我用了两个按钮 Priva

我在VB.Net End If语句中看到了一些奇怪的行为,当它设置了断点时。当If语句为false时,程序到达End If断点,并在单击continue后继续。如果If语句为true,程序将到达断点,但按continue后不会继续。您必须再次按“继续”。这正常吗?我问这个问题是因为我在调试一个子程序时遇到了麻烦,虽然这可能是我的错,但如果行为是我目前唯一能看到的,我无法解释的事情,那末该怎么办呢。下面的代码在末尾设置了断点If是测试这一点所需的全部,它可以放在任何地方。我用了两个按钮

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If 1 = 0 Then
    End If
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    If 1 = 1 Then
    End If
End Sub

尝试使用变量a=1。如果这不起作用。您可以尝试将代码复制到新项目中,然后在那里尝试您的代码。

我可以确认这种行为,但我以前从未真正注意到过。我想我可能从未在
End If
语句上设置断点。如果将断点放在前面的一行上,并在的情况下将其移到
末尾,则不会看到该行为。我怀疑它是否与你的其他问题有关,因为它显然从未影响过我。看看生成的IL和/或反汇编,看看是否有一个工件可以解释这种行为,可能会很有趣。我想到的一个想法是,按照代码的翻译方式,单个逻辑断点需要两个低级断点,而第二种情况下的路径会同时命中这两个断点。jmcillhinney,Craig。感谢您的回复和确认。我提到的bug是因为我怀疑我的错误,与End If断点行为无关,但这些小的奇怪之处肯定很有趣。这是一个代码生成bug,vb.net编译器删除了If语句(因为表达式始终为true),并用nops替换它。这让调试器感到困惑,它实际上设置了两个断点。另一种方法是在断点命中后使用Debug>Windows>Disassembly,注意它认为有两种方法。对此我们无能为力,请使用“帮助>发送反馈>报告问题”让他们知道。谢谢Hans。和往常一样,逻辑性强,可以理解,但这种奇怪的断点行为不仅适用于总是正确的If语句。如果我按照VBShaper的建议设置了一个变量,那么EndIf断点将根据变量的值以同样奇怪的方式运行。编译器不知道If语句是否为真,但End If断点仍将如我所描述的那样运行。这似乎没有响应这个问题。如果是,它需要更多的细节。提问者为什么要这样做?它是如何解决这个问题的呢?谢谢VBShaper,但我关心的不是代码本身。我关于If“1=1”的示例“If”语句显然是荒谬的,我只是将其用作示例。如果我接受您关于使用变量“If a=1”的建议,那么如果a=0(False),End If语句将只需要从断点开始执行一个continue。如果我设置a=1(True),断点将需要2个。我所质疑的只是这个奇怪的断点“一两个继续”行为,而不是代码本身。仅供参考,将代码复制到新项目是我在遇到困难时经常使用的解决方案。谢谢