HOW TO:在 Visual Studio .NET 中设置条件断点
本任务的内容
摘要
创建示例代码
创建无条件断点
创建条件函数断点
创建附加断点
更改断点属性
在调试模式下逐步调试代码
更改断点窗口输出
禁用并清除断点
疑难解答
参考
概要
Visual Studio .NET 提供了多种方法来帮助您调试 .NET Framework 应用程序。本文分步讲解了如何使用断点来调试用 Microsoft Visual Basic .NET 编写的代码段。
本文假定您熟悉 Visual Basic .NET 语法。
返回页首
创建示例代码
启动 Visual Studio .NET,新建一个名为“Debug”的 Visual Basic 控制台应用程序项目。
在 Module1.vb 中修改代码,如下所示:
Module Module1
Sub Main()
Dim MyTime As String = TimeString
Dim MyGreeting As String
' Create a greeting.
If CInt(TimeString.Substring(0, 2)) < 12 Then
MyGreeting = Reverse("Good Morning")
Else
MyGreeting = Reverse("Good Afternoon")
End If
' Display reversed greeting.
Console.WriteLine(MyGreeting)
End Sub
Function Reverse(ByVal inStr As String) As String
' Reverses the characters contained in a string.
Dim MyInt As Integer
Dim MyStr As String
For MyInt = (inStr.Length - 1) To 0 Step -1
MyStr = MyStr & inStr.Substring(MyInt, 1)
Next
Return MyStr
End Function
End Module
保存该项目。
返回页首
创建无条件断点
在调试菜单上,单击窗口,然后单击断点。
在“代码”视图中,单击以下代码行旁边的左边距。这样可以在该语句处设置断点:
If CInt(TimeString.Substring(0, 2)) < 12 Then
在调试菜单上,单击开始。这时,程序在调试模式下启动。程序在到达断点时停止。
在调试菜单上,单击窗口,然后单击局部变量。这时,显示局部变量 MyGreeting 和 MyTime 的值。
在调试菜单上,单击继续(或按 F5 键)。程序会在断点后继续执行。
返回页首
创建条件函数断点
在“断点”窗口中,单击新建,新建一个断点。
在函数选项卡上,为函数键入 Reverse。为行键入 1,为字符键入 1,然后将语言设置为 Basic。
单击条件,并确保选中了条件复选框。为条件键入 instr.length > 0,并确保选中了为真选项,然后单击确定。
在新断点对话框中,单击确定。
在调试菜单上,单击开始。
程序会在 Main 方法中的 IF 语句处停止。要继续执行程序,请在调试菜单上单击继续。
程序会在 Reverse 函数处再次停止。继续运行该程序。
返回页首
创建附加断点
要创建附加断点,请单击以下代码行旁边 Reverse 函数的左边距:
MyStr = MyStr & inStr.Substring(MyInt, 1)
返回页首
更改断点属性
要更改新断点的属性,请用鼠标右键单击上一步中的代码行,然后单击断点属性。
单击点击次数。
要以 2 的倍数的形式设置“点击断点时”,请在文本字段中键入 2,然后单击确定。
在断点属性对话框中,单击确定。
在调试菜单上,单击开始(或按 F5 键)。程序在第一个断点处停止。
继续运行程序,直到调试过程结束。
返回页首
在调试模式下逐步调试代码
在调试模式下启动程序。当程序到达第一个断点时,在调试菜单上,单击单步执行(跳过过程)。这时,程序跳过该断点并转至下一条语句。
如果您在上午运行此程序,会看到下面的语句:
MyGreeting = Reverse("Good Morning")
如果您在下午运行此程序,会看到 Else 语句。再次按 F10 键可转至下面的语句:
MyGreeting = Reverse("Good Afternoon")
在调试菜单上,单击单步执行(进入过程)。这时,单步执行 Reverse 函数。
继续单击调试菜单上的单步执行(跳过过程),直到再次到达下面的语句:
MyStr = MyStr & inStr.Substring(MyInt, 1)
通过单击左边距来删除当前断点。
在调试菜单上,单击跳出。这时,程序离开 Reverse 函数。
请继续,直到调试过程结束。
返回页首
更改断点窗口输出
在“断点”窗口中,单击列菜单,显示可用列。
单击函数,向“断点”窗口显示添加“函数”列。
返回页首
禁用并清除断点
在“断点”窗口中,双击下面的断点:
Module1.vb,行 9 字符 1
这时,程序转至“代码”窗口中的断点位置:
If CInt(TimeString.Substring(0, 2)) < 12 Then
在“断点”窗口中,取消选中此断点的复选框。这样将禁用此断点。
在“断点”窗口中,单击禁用所有断点,再单击启用所有断点,然后单击清除所有断点。
返回页首
疑难解答
您只能在可执行的代码行中创建断点。例如,注释或没有默认值的变量声明不接受断点。
您只能在函数声明的第一行中指定函数断点。
Microsoft 不支持在 Visual Basic .NET 中使用数据断点。
返回页首
参考
有关调试断点的详细信息,请参阅 Visual Studio .NET 联机帮助文档中的以下主题:
Debugging Basics:Breakpoints
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vxconDebugging101Breakpoints.asp
========
VS2005强大的条件断点功能
http://blog.youkuaiyun.com/magictong/article/details/5429721今天在调一个漏洞修复的crash的时候,进入了一个很大的循环,循环不停地检测是否有当前漏洞,断点打在循环体里面,已知出问题的漏洞的KB号,但是如果要在刚好扫描到这个KB号的时候断下来,还有点小麻烦,我又不想改代码用if断下来,其实VS2005做到这个非常简单,设置条件断点就行了,在断点的右边单击右键会弹出断点条件设置菜单:
然后再点击 Condition... 输入条件 KBID == 977150,确定即可:
这个里面还有一个Has changed选项,可以跟踪某个变量变化的情况下断下来,牛叉。
菜单上还有其他的一些功能:
1、HitCount...可以设置命中几次后,或命中次数是某数的倍数,或者命中次数大于某数时断下来(命中就是只执行到断点处)
2、Filter...顾名思义,就是过滤,可以设置只有某些外部条件满足时才触发断点
3、When Hit...根据英文意思是当断下来的时候,干嘛干嘛,可以打印一串字符串啊,×××的,还可以运行宏,太牛B了,不过我还没有深究怎么弄。要运行宏的话,是用vbs写的,并事先导入到vs2005里面。
========
条件断点的设置和应用
http://blog.youkuaiyun.com/bichenggui/article/details/4510529什么是条件断点?
条件断点就是带有一个条件表达式的断点,在调试中,只有这个条件表达式为真时,程序到达断点时,才会暂停。
而对于普通的断点,只要程序到达该断点是,就会暂停。这个条件表达式必须能被调试器识别和求值,,比如说在watch窗口里
可以识别和求值的变量同样也可以在条件表达式里被识别和求值。这大大方便了我们调试某些问题,比如说,你在循环体内设置了
一个断点(1000次循环),而这个bug在循环到999次时才发生,你可以通过条件断点来设置循环到999次然后暂停。利用普通的
断点你不能实现这一点。
如何设置条件断点?
1. VC 6.0:
如图,先在你要设定断点的位置设置好断点,然后按alt + F9,弹出breakpoints对话框,如下图所示。
选中需要设置条件的断点,然后点击condition,然后就会出现break condition这个对话框,这个对话框就是设置条件断点的地方。
从上到下有三个输入框:
1. 输入一个表达式,当表达式的值发生变化时,断点会暂停,否则不暂停
2、设定查看的数组或是结构的需要watch的个数
3. 设置循环过多少次 才暂停。
这个例子中,设置循环999次后暂停,输入的值为999.注意,这个次数必须在合理范围内。否则就是失去了意义。
2. 对于VS2008:
先设置断点,按alt + F9,或者是从菜单(Debug->Window->breakoints),选中需要设置条件的断点,按右键,选中condition,然后出现以下对话框:
输入条件表达式,选中is true时,该条件表达式为true的时候,程序会break。
当选中has changed时,该表达式的值发生改变时,程序会break。
表达式可以是一个变量,也可以是一个常规表达式。(前提是可以被debugger识别和求值),可参照watch窗口。
========