欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

VS2008中的调试技巧

程序员文章站 2024-02-21 22:02:58
...

关于Bug调试的技巧,现将罗列如下,以后还会继续补充: 1,跳到当前光标处(CtrlF10) 先将光标定位到要测的代码上,同时按下CtrlF10,程序将会直接跳到该行代码处停下。 2, 条件中断 当程序满足开发人员设定的条件后,条件断点才会被触发,调试器中断。 首


关于Bug调试的技巧,现将罗列如下,以后还会继续补充:

1,跳到当前光标处(Ctrl+F10)

先将光标定位到要测的代码上,同时按下Ctrl+F10,程序将会直接跳到该行代码处停下。

2,条件中断

当程序满足开发人员设定的条件后,条件断点才会被触发,调试器中断。

首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“Condition…”,弹出BreakPoint Condition对话框,

VS2008中的调试技巧

在编辑框中输入条件,当条件为真时,条件断点才会被触发,调试器中断;否则,该断点将被跳过。

3,记录到达断点次数

只有当第n次满足条件,运行到断点时,才中断程序运行,

首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“Hit Count...”,弹出BreakPoint Hit Count对话框,

VS2008中的调试技巧

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对话框,

VS2008中的调试技巧

5,跟踪点—进入断点时的自定义操作

跟踪点是种特殊的断点,当命中跟踪点时,会触发一系列自定义操作。如果你想观察程序的行为,又不想中断调试的时候,这个功能尤其有用。

首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“When Hit...”,弹出When BreakPoint Is Hit对话框,

VS2008中的调试技巧

一旦命中断点就打印跟踪信息,我们已经把局部变量x的值作为跟踪信息的一部分进行输出。局部变量可以通过{变量名}语法进行输出。

还可以利用系统内置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在跟踪信息中输出常用的值。

在上面的例子中,同时选中了Continue execution选项,因为我们不想中断调试,而是想程序继续运行。每次断点满足条件时,我们自定义的信息都会被输出。

跟踪信息显示在VS2008的“输出”窗口中。

6,跟踪点—运行自定义的宏

上面的跟踪点调试,只是输出了某个局部变量的信息,当命中跟踪点时,如果我们想输出所有局部变量的信息。可以这样做:

VS没有这样的内置功能,需要我们通过自定义宏来实现,然后在命中跟踪点时,调用该宏。

首先打开VS的宏编辑器,工具-宏-宏IDE,然后在项目资源管理器MyMacros节点下,New一个Module,随便命名(例如“UsefulThings”),

再把下面的VB宏代码贴到模块中进行保存。

[vb] view plaincopyprint?

  1. Public Module UsefulThings
  2. Sub DumpLocals()
  3. Dim outputWindow As EnvDTE.OutputWindow
  4. outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object
  5. Dim currentStackFrame As EnvDTE.StackFrame
  6. currentStackFrame = DTE.Debugger.CurrentStackFrame
  7. outputWindow.ActivePane.OutputString("*Dumping Local Variables*" + vbCrLf)
  8. For Each exp As EnvDTE.Expression In currentStackFrame.Locals
  9. outputWindow.ActivePane.OutputString(exp.Name + " = " + exp.Value.ToString() + vbCrLf)
  10. Next
  11. End Sub
  12. End Module

上述宏代码将循环当前的堆栈,把所有的局部变量输出到“输出”窗口。

下面使用上面自定义的宏:

首先在特定代码行上,设定断点,在断点处右键,在弹出的快捷菜单上选择“When Hit...”,弹出When BreakPoint Is Hit对话框,

VS2008中的调试技巧

调试运行程序,当命中跟踪点时,宏会自动列出每个局部变量的名称和值,并在VS的“输出”窗口中显示。