问题描述
|
我是vb新手。当我开始在vb.net 2010中处理这个新项目时,我投入了许多断点来尝试了解项目的执行顺序,但徒劳无功。
根据进入属性/功能(F11)的预期操作,进入命令F11应该正常工作。但是当我按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一步一步执行代码。如果我将breakpoingts放在第2行中,那么将执行第2行。
所以在我看来,显示的执行顺序是基于断点的!因此,如果我在不同位置放置断点,则显示的执行顺序将有所不同!因此,我不可能真正了解执行顺序。
谢谢!
解决方法
当您将其告知
Step Into
时,它将遵循确切的代码路径。因此,为了计算第一行中的TabStrip.TabControl.TabAlignment.Bottom
,它首先必须引用TabStrip
,然后查找TabControl
属性,然后查找TabAlignment
属性,然后-在这里跳转到属性1标签,对吗?那是因为它必须为代码中的TabAlignment
属性执行Get
部分。一旦执行,它便知道引用是什么,因此将其返回到先前的执行级别,此时可以查找Bottom
属性。现在,可以将值分配给“ 9”属性。
第3行的用法相同:为了知道将ѭ10分配给的位置,它必须评估Me.tcData.TabsDirection
属性,这涉及在TabsDirection
属性的Get
部分中执行代码。
因此,简而言之,您将看到代码遵循的确切执行路径,包括必须同时计算“ source”和“ destination \”属性的所有“子评估”。根据调试器的配置,它可能不会在系统代码中显示出来,但是如果将调试器设置为尽可能详细,则它将为您引用的每个属性(包括系统代码)跳转到Get
定义。对于System.Windows.Forms.DockStyle.Fill
,有5个属性查找,只是将其分配给局部变量。