为什么vb代码不是通过使用F11一步一步执行的?

时间:2011-06-13 16:09:01

标签: vb.net

我是vb的新手。当我开始在vb.net 2010中开始研究这个新项目时,我提出了许多断点来试图理解项目的执行顺序,但却发现它是徒劳的。

步入命令 F11 应该根据Step Into Property/Function (F11) doesn't work as expected正常工作。但是当我按 F11 时,我发现代码是基于断点从一个地方跳到另一个地方,而不是逐行或逐步。

举个例子,请看下面的代码

    Me.tcData.Alignment = TabStrip.TabControl.TabAlignment.Bottom   'line 1-breakpoint
    Me.tcData.Dock = System.Windows.Forms.DockStyle.Fill            'line 2
    ...
    Me.tcData.TabsDirection = TabStrip.TabControl.FlowDirection.LeftToRight  'line 3

Public Property Alignment() As TabAlignment           'The property 1 called by line 1
    Get
        Return m_Alignment
    End Get
    Set(ByVal value As TabAlignment)
        m_Alignment = value
        AdjustHeight()
        PositionButtons()
        For Each t As TabPage In TabPages
            t.Alignment = value
        Next
    End Set
End Property


Public Property TabsDirection() As FlowDirection 'The property 3 -breakpoint
    Get
        Return m_TabsDirection
    End Get
    Set(ByVal value As FlowDirection)
        m_TabsDirection = value
        SelectItem(Nothing)
    End Set
End Property

当我在第1行按 F11 时,它会转到属性1.返回后,当我按 F11 时,它会直接转到属性3,而不会访问第2行和第3行的代码。

我不明白为什么不使用 F11 逐步执行代码。如果我在第2行放置breakpoingts,则执行第2行。

所以在我看来,显示的执行顺序是基于断点的!因此,如果我在不同的地方放置断点,显示的执行顺序会有所不同!因此,我不可能真正理解执行顺序。

谢谢!

1 个答案:

答案 0 :(得分:0)

当您告诉Step Into时,它会遵循确切的代码路径。因此,为了计算第一行中的TabStrip.TabControl.TabAlignment.Bottom,首先必须引用TabStrip,然后查找TabControl属性,然后查找TabAlignment属性,然后 - 这是跳到属性1标签的地方,对吧?那是因为它必须在代码中为Get属性执行TabAlignment部分。一旦执行它,它就知道引用是什么,因此它返回到先前的执行级别,此时它可以查找Bottom属性。现在,它可以将值分配给Me.tcData.Alignment属性。

第3行也是如此:为了知道它在哪里分配TabStrip.TabControl.FlowDirection.LeftToRight,它必须评估Me.tcData.TabsDirection属性,这涉及在Get部分执行代码您的TabsDirection财产。

因此,简而言之,您将看到代码所遵循的确切执行路径,包括为计算“源”和“目标”属性而必须执行的所有“子评估”。根据调试器配置,它可能不会为系统代码显示此信息,但如果将调试器设置为尽可能详细,则会跳转到您引用的每个属性的Get定义,包括系统代码。 System.Windows.Forms.DockStyle.Fill有5个属性查找,只是将它分配给局部变量。