您当前的位置:首页 > 计算机 > 编程开发 > C语言

断点的操作以及跟踪点的设置

时间:01-03来源:作者:点击数:

我们在一些调试的情景下,我们可能会出现这种情况:我们在程序中设置了断点 A、B、C、D,然后我们在一次调试中不想让断点 B、C 生效,但是在下一次调试中我们可能又需要使用断点 B、C,这回我们应该怎么办呢?

有同学会说了:我们不需要断点 B、C 的时候把断点 B、C 删除掉,需要的时候再设置一下就行了。这确实是个不错的想法,但是如果我们的工程很大呢?断点又分布在不同的地方,那我们该怎么办呢?

因为 Visual Studio 本身就是为大工程而生的,所以我们完全不用担心工程大的问题,其实在很多调试器中都包含了类似断点禁用的功能,Visual Studio 的 Remote Debugger 也不例外,我们可以通过暂时禁用断点来达到上述目的。

我们接下来通过下面这段代码来显示我们工作收入的正确打开方式,首先我们在第7行设置一个断点,然后按 F5 启动调试器。等待断点第一次被触发。

#include <stdio.h>
#include <stdlib.h>
int main(){
    for ( int i=1; i <= 500; i++ )
    {
        printf("现在我有%d万元资产\n", 6666 * i);
        //TODO:在这里插入断点
        _sleep(500 - i);
    }
}

断点第一次被触发的时候,我们注意这个地方,我们使用鼠标右键单击它,并在弹出的菜单中选择禁用断点(D),这时断点行的图标也变成了,这就说明我们的断点被成功地禁用了。

接下来我们按 F5 继续被调试程序的运行,开启疯狂收入模式,资产增加的速度会越来越快哦。为了预防财富所带来的危险(土豪略过),我们需要将程序暂停,这时我们使用鼠标右键单击我们的断点图标,在弹出的菜单中选择 启用断点(L),这时我们的断点图标又变成了,这就说明我们的断点被成功地启用了。我们按 Shift + F5 终止调试。同样的,在编辑代码模式下我们也可以启用或禁用断点。断点的启用和禁用极大程度的方便了我们的调试操作。

在一些调试情境下,我们可能会碰到这样的情况,我们想让程序在运行到某个地方的时候输出一定的调试信息,比如当前正在执行的函数什么的。这时我们可以设置断点,查看堆栈,再按 F5 继续运行。但是这样是很麻烦的,我们需要不停地按 F5 ,不过不用担心,这里我们有更好的解决方案——使用跟踪点。

下面我们来了解一下跟踪点,什么是跟踪点呢?顾名思义,他是用来跟踪程序的。跟踪点和断点差不多,也是靠触发起作用的,唯一不同的是,它可以选择是否像调试窗口输出跟踪消息,并且可以选择是否暂停程序。所以我们可以把跟踪点当成是一类特殊断点。

我们来试试在 Visual Studio 编辑器中插入跟踪点,与插入断点一样,我们把插入光标移到想要插入跟踪点的位置,然后点击鼠标右键,在弹出的菜单中点击 断点(B) -> 插入跟踪点(T) ,我们可以看到这么个对话框:

我们看到,上面有很多提示信息,我们只要根据提示信息操作即可。比如在循环中我们常用到的打印消息:

函数:$FUNCTION , 变量值 i 的值为 {i}

接下来我们使用跟踪点来跟踪冒泡排序算法的数据交换过程。我们在 Visual Studio 中新建一个工程,输入如下代码:

#include <stdio.h>
void genBubbleSort(int prevArray[] , int arrayLength){
    int p , n , tempValue;
    for (n = 0 ; n < arrayLength - 1 ; n++){
        for (p = 0; p < arrayLength - 1 - n; p++){
            if (prevArray[p] > prevArray[p + 1])
            {
                //数据交换
                tempValue = prevArray[p];
                prevArray[p] = prevArray[p + 1];
                prevArray[p + 1] = tempValue;
                //TODO:插入断点
            }
        }
    }
}
int main(){
    int myArray[10] = { 127 , 325 , 1235 , 7768 , 844 , 651 , 5424 , 102 , 318 , 907 };
    int arraySize = 10;
    printf("!原始数组:\n");
    for (int i = 0 ; i < arraySize ; i++){
        printf(" -> 第%d项 : %d " , i + 1 , myArray[i]);
        printf("\n");
    }
    genBubbleSort(myArray , arraySize);
    printf("!冒泡排序后的数组:\n");
    for (int i = 0 ; i < arraySize ; i++){
        printf(" -> 第%d项 : %d ", i + 1 , myArray[i]);
        printf("\n");
    }
    getchar();
}

上面这就是一个典型的冒泡排序算法的实现了。现在我们在第8行插入跟踪点,我们打印如下信息(花括号里的是我们想要查看的变量的值)。

函数:$FUNCTION 数组第{p}项:{prevArray[p]}> 数组第{p+1}项{prevArray[p+1]} 进行交换

我们通过调试器调试这个程序可以看到冒泡排序的过程,现在我们按 F5 启动调试器开始运行,这时我们查看输出窗口:

这里是不是输出了跟踪信息呢,没错,跟踪点的使用就是这么简单,大家可以尝试使用跟踪点显示我们的 tempValue 变量的变化情况,体验跟踪点使用的酸爽!

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门