c语言程序调试设断点的优点,断点的操作以及跟踪点的设置

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

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

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

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

#include

#include

int main(){

for ( int i=1; i <= 500; i++ )

{

printf("现在我有%d万元资产\n", 6666 * i);

//TODO:在这里插入断点

_sleep(500 - i);

}

}

537225776d3b9bf27c7dd116077bdf02.png

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

b54fa9ce27acf406ddcbacb8ba5ceebd.png,这就说明我们的断点被成功地禁用了。

接下来我们按 F5 继续被调试程序的运行,开启疯狂收入模式,资产增加的速度会越来越快哦。为了预防财富所带来的危险(土豪略过),我们需要将程序暂停,这时我们使用鼠标右键单击我们的断点图标,在弹出的菜单中选择 启用断点(L),这时我们的断点图标又变成了

bd09ff73b162a8b5ba00b2674dc48b21.png,这就说明我们的断点被成功地启用了。我们按 Shift + F5 终止调试。同样的,在编辑代码模式下我们也可以启用或禁用断点。断点的启用和禁用极大程度的方便了我们的调试操作。

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

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

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

44809c15d4e6d0f21794ff2c8b7da2ee.png

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

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

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

#include

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 启动调试器开始运行,这时我们查看输出窗口:

794453a0d9c3c4b13e7304fd96c38ec5.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值