c++代码调试,代码自测,打上断点后启动调试和多种调试方法

启动调试,程序运行前调试,程序自测:
快捷键f5在代码开发的过程中进行调试,一般用于自己测试自己开发的代码时使用,这种情况下的代码相对独立且体量较小。
c++代码调试,代码自测,打上断点后启动调试和多种调试方法_第1张图片

进入调试过程的方法:
将断点打在main函数第一行,使用工具栏中的:逐语句f11,逐过程f10,跳出shift+f11,一步步控制代码运行的位置,直到被测代码段结束。
这样调试的过程可以实时的检测到可能出现的问题,类似于:数据不理想,bug,崩溃,内存泄露,内存多次释放,缓存区溢出等问题可以在调试的过程中立刻捕获并修改。

使用场景:
想要运行程序查看代码的运行效果时,先手动控制着调试一遍,调试完毕,然后再选择“开始执行(不调试)”。
当程序出现问题时,其执行结果是无法预测的,比如:程序崩溃,内存泄露,重复释放的现象都是弹出一个弹窗,然后不得不终止程序,进行调试,那不如一开始就调试一遍,调试结束也能得出运行结果。

接着调试的方法:
启动调试后,程序会执行到其最先到达的断点处,并暂停在那个断点。
程序暂停后,“启动调试”菜单就会变成“继续”,点击继续或f5,程序就会继续执行直到遇到下一个断点或结束。
c++代码调试,代码自测,打上断点后启动调试和多种调试方法_第2张图片

逐语句执行:f11
又称单步执行或逐行执行,一行一行的执行程序中的代码,如果某行代码时调用函数,继续逐语句执行就可以进入到函数语句中去,直接跳转到函数定义体。
如果遇到了系统函数或者库函数,在该函数有源码时会进入函数,没有源码时则会像普通代码语句一样执行下一句。
当if语句中出现&&与||等运算符时,而且运算符两边的参数都是函数时,以&&为例,若第一个函数进去并返回为FALSE,就不会进入第二个函数。
||运算符的话,若第一个函数进去并返回TRUE,就不会进入第二个函数,因此在调试的时候需要注意,调试时if语句中有可能不会进入某个或某些函数。
逐语句执行按照的不是文本上的行数,而是按照执行步骤一步步来,当一行代码中包含多个步骤时,逐语句执行会逐个执行命令,在逻辑顺序上逐个进入函数。

逐过程执行:f10
在代码中没有函数调用时,逐过程执行和逐语句执行的效果是一样的,就是执行当前代码行,暂停在下一代码行。
在当前代码行中有函数调用时,逐语句执行会进入该函数中并暂停,如果有多个函数则依次进入和从函数中返回;
而逐过程执行则会在当前代码行不管有多少个函数,都会跳过并到下一行;
对于不重要的函数,没有源码的函数等,使用逐过程执行或者f10可以直接将其跳过,执行下一行代码,节省调适时间。

跳出执行:shift+f11
跳出当前函数的执行,当程序在逐语句执行和逐过程执行到某些函数其内部后,跳出执行可以让我们跳出该函数。
当我们已经对相应代码做了足够的了解而不需要关心其他的函数内容时;或者进入到没有源码的函数时;没必要或者无法在继续调试,就可以通过跳出执行,使程序调到调用该函数的代码的下一行代码处并暂停。
c++代码调试,代码自测,打上断点后启动调试和多种调试方法_第3张图片

运行到光标处:Ctrl+f10,
该操作不在调试菜单中,在鼠标右键菜单中。
在鼠标右键出现的“运行到光标出”的作用等价与,在当前光标所在处打上断点(虚拟的),然后进行执行“启动调试/继续调试”,如果程序运行到光标处,则暂停在光标代码行的断点处,然后消除该断点。
对比打上断点点击开始调试的流程,这个操作更加的简单省事和灵活,但前提是能确定程序确实可以运行到光标处,如果不能的话就会运行到代码逻辑上的下一个断点或者结束。
c++代码调试,代码自测,打上断点后启动调试和多种调试方法_第4张图片

多次执行代码:鼠标拖动代码行左侧的指针。
该功能可以讲程序运行指针的位置改变,只要用鼠标拖动代码行左侧的那个黄色小指针就可使已经走过的代码再走一遍,但这个过程只是将代码运行的位置改变了,而不会改变已经有的数据,已经有的数据结果不会随着代码运行指针的回退而回退,而是会按照代码的流程继续运算。
常用于查看bug的出现流程,代码的逻辑漏洞,算法的结果重现等。
注意点:当起点和终点处的代码数据,依赖关系,存在情况不同时,就需要谨慎使用了,有可能导致程序调试停止或崩溃。
所以多次执行代码的时候有两个基本原则:
不跳到函数外,不跳过初始化语句。
c++代码调试,代码自测,打上断点后启动调试和多种调试方法_第5张图片
c++代码调试,代码自测,打上断点后启动调试和多种调试方法_第6张图片
用鼠标将代码指针拉回去就可以,但不要错过重要的东西。

你可能感兴趣的:(vs调试,c++)