以vs程序为例,其逐语句调试和逐过程调试的区别仅在于它们处理函数调用的方式不同,这两个命令都指示调试器执行下一行的代码。如果某一行包含函数调用,“逐语句”仅执行调用本身,然后在函数内的第一个代码行出停止,而“逐过程”执行整个函数,然后在函数外的第一行处停止。
这两个命令都指示调试器执行下一行的代码。如果某一行包含函数调用,“逐语句”仅执行调用本身,然后在函数内的第一个代码行处停止。而“逐过程”执行整个函数,然后在函数外的第一行处停止。如果要查看函数调用的内容,请使用“逐语句”。若要避免单步执行函数,请使用“逐过程”。
如果我们在printf()设置了断点,按下“逐过程”按钮或F10键,程序就会执行 printf(),并暂停在下一行代码处。printf()是一个函数,它本身由多条语句构成,如果你希望进入printf()函数内部,查看整个函数的执行过程,可以点击“逐语句”按钮,或者按F11键,这样程序就会进入printf()所在的源文件。
当需要跳出函数时,可以点击“跳出”按钮,或者按Shif+F11键,就会返回刚才的代码。逐过程(F10)和逐语句(F11)都可以用来进行单步调试,但是它们有所区别:
逐过程(F10)在遇到函数时,会把函数从整体上看做一条语句,不会进入函数内部;
逐语句(F11)在遇到函数时,认为函数由多条语句构成,会进入函数内部。
逐语句(F10)不仅可以进入库函数的内部,还可以进入自定义函数内部。在实际的调试过程中,两者结合可以发挥更大的威力。断点+查看/修改变量+逐过程调试+逐语句调试,这足以解决绝大多数逻辑问题,到此,初学者就已经学到了调试的基本技能。