添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Hit Count 使您能够确定在调试器中断执行之前命中断点的次数。 在默认情况下,每次命中断点,调试器就中断执行 。通过设置命中次数,您可以让调试器每命中两次断点中断执行一次,也可以每 10 次、每 512 次或任意选择的次数中断一次。程序中的某些 bug 不会在第一次执行循环、调用函数或访问变量时显现出来,这时候命中次数设置就很有用了。有些时候,bug 直到重复 100 次或 1000 次时才显现出来。此时可以设置命中次数为 100 或 1000 以解决问题。

Condition 是一个表达式,它确定断点是命中还是跳过。当调试器到达该断点时,它会计算条件的值。只 有当条件满足时,断点才会命中。可以在某个位置断点处设置条件,只有当条件为真时,才会中断执行 。例如调试一个银行程序,其中的帐户余额不允许小于零。可以在代码中的某些位置设置断点并附加以下条件: balance < 0 。运行程序时,当余额小于零时,执行就会在这些位置中断。然后,就可以在第一个断点处检查变量和程序状态,再继续执行到第二个断点位置,如此继续。

Action 指定在命中断点时应执行的操作。默认情况下,调试器中断执行,但是您可以选择打印一条消息或者运行一个 Visual Studio 宏。如果选择打印消息而不是中断,则断点的效果与 Trace 语句非常类似。这种使用断点的方法称为跟踪点。

Filter 提供了一种为断点指定进程或线程的方法。

一个特别有用的技巧是在 “调用堆栈” 窗口中设置断点。使用 “调用堆栈” 窗口,您可以在特定的函数调用处设置断点。在调试递归函数(调用自身的函数)时,这个功能尤其有用。如果在一定次数的调用后中断执行,可以使用 “调用堆栈” 窗口在先前发出而尚未返回的调用中设置断点。调试器会在退出当前的调用过程中遇到该断点并中断执行。

断点条件是一个到达断点时调试器将计算的表达式。 如果满足条件,调试器将检查 如何:指定命中次数 ,以确定是否中断(或执行另一个指定的操作)。

条件可以是调试器能够识别的任何有效表达式。 在银行程序,例如,您可以设置等断点条件 balance < 0 ,例如 myLocalVariable > 1 有关有效表达式的更多信息,请参见 调试器中的表达式

如果在设置断点条件时使用了无效语法,将立即出现警告消息。 如果在指定断点条件时使用的语法有效但语义无效,则在第一次命中断点将出现警告消息。 在这两种情况下,当命中无效断点时,调试器都会中断执行。 只有当条件有效并且条件的计算结果为 false 时,才会跳过断点。

调试器中的表达式

Visual Studio 调试器包括表达式计算器,当您在 “快速监视” 对话框、 “监视” 窗口或 “即时” 窗口中输入表达式时,这些计算器可以对其进行计算。 这些表达式计算器还可以在 “断点” 窗口和调试器中的许多其他位置使用。

本节描述在调试器中输入表达式时可以使用的语法。 分为下列几部分:

常见的表达式计算器功能

本机 C++ 中的表达式

C++ 中的托管表达式

C# 和 F# 中的表达式

Visual Basic 中的表达式

脚本中的表达式

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

我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处。当程序员的确需要仔细观察每一步的状态变化时, F10/F11是合理的选择。然而多数情况下,人们只想快速到达他们真正关心的代码处,这时候F10/F11就不是最佳选择了。

这时,你应该利用“跳到当前光标处”这个功能。先把光标定位在要测的目标代码行上,再同时按Ctrl和F10,被测程序将直接跳到该行停下。你再也不用按许多次F10/F11了。即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去。

太强大了, ctrl+F10可以按多次

ctrl+F7停止调试,会有提示:是否停止调试,

停止调试更好的方法:shift+F5

断点设置里还有一个断点条件:

点击命中条件:

(这么我们勾选【打印消息】。

我们勾选“打印一条消息( Print a message )”复选框,输入一串文本,默认情况下,你输入的文本会被直接打印到调试的输出窗口里面来。除了:

a. $ 符号开头的几个关键字。比如 $FUNCTION 就会被替换成断点所在的函数名。其他有一些关键字在“ When Breakpoints Is Hit ”窗口当中有详细的说明。

b. 使用 大括号 {} 包含起来的变量名,这样的字符串会被替换成变量的值。

我们现在想在下面这段代码:

for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";

}

在调试时输出奇数的a[i]。应该怎么设置。

设置设置condition:

a[i]%2==1。

然后设置命中条件:

Function: $FUNCTION, Thread: $TID $TNAME {a[i]} 是奇数

在默认的Function: $FUNCTION, Thread: $TID $TNAME 加上{a[i]}是奇数即可。

调试完后,下面的调试窗口会输出以下信息:

Function: main(void), Thread: 0xC410 主线程 1 是奇数
Function: main(void), Thread: 0xC410 主线程 3 是奇数
Function: main(void), Thread: 0xC410 主线程 5 是奇数
程序“[50188] oj.exe: 本机”已退出,返回值为 0 (0x0)。

参考了:http://www.cnblogs.com/killmyday/archive/2009/09/27/1574919.html

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

许多人不知道“跟踪点(TrackPoints)”这个调试功能。“跟踪点“是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用。

我将用一个简单的控制台程序来演示如何使用“跟踪点”。如下是斐波那契数列的一个递归实现:

int fibonacci(int x)
    if(x<=2)
        return 1;
        return fibonacci(x-1)+fibonacci(x-2);

在fibonacci下面的{ 设置断点:

在上例中,我们同时选中了底端的“continue execution“选项,这说明我们不希望程序中断调试状态,而是继续运行。唯一的不同是:每次断点条件满足时,我们的自定义追踪信息都将被输出。

  现在当我们运行程序时,会发现自定义追踪信息自动显示在Visual Studio的“输出“窗口里。这让我们很容易看到程序的递归调用过程:

调用Fibonacci(5),按F5,debug窗口输出:

Function: fibonacci(int), Thread: 0x1358 主线程  x=5
Function: fibonacci(int), Thread: 0x1358 主线程  x=4
Function: fibonacci(int), Thread: 0x1358 主线程  x=3
Function: fibonacci(int), Thread: 0x1358 主线程  x=2
Function: fibonacci(int), Thread: 0x1358 主线程  x=1
Function: fibonacci(int), Thread: 0x1358 主线程  x=2
Function: fibonacci(int), Thread: 0x1358 主线程  x=3
Function: fibonacci(int), Thread: 0x1358 主线程  x=2
Function: fibonacci(int), Thread: 0x1358 主线程  x=1
程序“[10676] oj.exe: 本机”已退出,返回值为 0 (0x0)。

 (如果你仔细分析上面的输出结果,你会发现递归到底是怎么执行的。) 

你也可以选择往应用程序中添加一个自定义追踪信息的监听器。这时追踪点的输出信息将通过它输出,而不是Visual Studio的“输出“窗口。

2篇好文:

http://kb.cnblogs.com/page/92158/

http://blog.csdn.net/qwang24/article/details/4087423