关于Bug调试的技巧,现将罗列如下,以后还会继续补充:
1,跳到当前光标处(Ctrl+F10)
先将光标定位到要测的代码上,同时按下Ctrl+F10,程序将会直接跳到该行代码处停下。
2,条件中断
当程序满足开发人员设定的条件后,条件断点才会被触发,调试器中断。
首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“Condition…”,弹出BreakPoint Condition对话框,
在编辑框中输入条件,当条件为真时,条件断点才会被触发,调试器中断;否则,该断点将被跳过。
3,记录到达断点次数
只有当第n次满足条件,运行到断点时,才中断程序运行,
首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“Hit Count...”,弹出BreakPoint Hit Count对话框,
1)break when the hit count is equal to
当满足条件,并且第5次进入断点时,断点命中一次。
2)break when the hit count is a multiple of
当满足条件,并且进入断点的次数是5的倍数时,断点被命中。
3)break when the hit count is greater than or equal to
当满足条件,并且进入断点的次数大于5时,断点被命中。
4,机器/线程/进程过滤
首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“Filter...”,弹出BreakPoint Filter对话框,
5,跟踪点—进入断点时的自定义操作
跟踪点是种特殊的断点,当命中跟踪点时,会触发一系列自定义操作。如果你想观察程序的行为,又不想中断调试的时候,这个功能尤其有用。
首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“When Hit...”,弹出When BreakPoint Is Hit对话框,
一旦命中断点就打印跟踪信息,我们已经把局部变量x的值作为跟踪信息的一部分进行输出。局部变量可以通过{变量名}语法进行输出。
还可以利用系统内置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在跟踪信息中输出常用的值。
在上面的例子中,同时选中了Continue execution选项,因为我们不想中断调试,而是想程序继续运行。每次断点满足条件时,我们自定义的信息都会被输出。
跟踪信息显示在VS2008的“输出”窗口中。
6,跟踪点—运行自定义的宏
上面的跟踪点调试,只是输出了某个局部变量的信息,当命中跟踪点时,如果我们想输出所有局部变量的信息。可以这样做:
VS没有这样的内置功能,需要我们通过自定义宏来实现,然后在命中跟踪点时,调用该宏。
首先打开VS的宏编辑器,工具-宏-宏IDE,然后在项目资源管理器MyMacros节点下,New一个Module,随便命名(例如“UsefulThings”),
再把下面的VB宏代码贴到模块中进行保存。
Public Module UsefulThings Sub DumpLocals() Dim outputWindow As EnvDTE.OutputWindow outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object Dim currentStackFrame As EnvDTE.StackFrame currentStackFrame = DTE.Debugger.CurrentStackFrame outputWindow.ActivePane.OutputString("*Dumping Local Variables*" + vbCrLf) For Each exp As EnvDTE.Expression In currentStackFrame.Locals outputWindow.ActivePane.OutputString(exp.Name + " = " + exp.Value.ToString() + vbCrLf) Next End Sub End Module
上述宏代码将循环当前的堆栈,把所有的局部变量输出到“输出”窗口。
下面使用上面自定义的宏:
首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“When Hit...”,弹出When BreakPoint Is Hit对话框,
调试运行程序,当命中跟踪点时,宏会自动列出每个局部变量的名称和值,并在VS的“输出”窗口中显示。
参考文章:
http://www.mscto.com/aspnet/20110912100334.html