什么是跟踪调试以及跟踪调试的好处

什么是跟踪调试以及跟踪调试的好处,第1张

当你的程序出错了,而且程序很大的时候,你很那发现自己的错误,特别 是一些隐藏的 错误,跟踪调试可以一步一步往下执行,你观看每个变量的值,看看有什么问题,而且调试的时候到了 出错的地方会提示的,就知道大概错在哪了 VC调试,一般是需要设置一个断点的,譬如1)int i2)int j如果在int j处设置了断点,那么当程序运行到int j时,程序停止,这个时候就可以查看程序各种变量或执行状态了,简单的办法就是把鼠标停在要看的变量上面。会有一个个小的d出窗口来显示变量状态。

1)设置断点,一种是在代码行的最左边鼠标点击一下,会有个红点出来。快捷键是,将编辑光标--即插入符(不是鼠标光标)停在要设断点的代码行,然后按F9,就会有红点出来。

2)设置的断点,程序一定要能执行到。譬如:

{//0

int i = 0 //1

if (0 != i) {//2

int j = 1 //3

j++//4

} else { //5

int j = 3 //6

j += 2 //7

}//8

当把断点设在了4这里,由于int恒为0,因此断点设在4这里,程序是不会经过,也不会停下来让我们查看状态的。并且此时的红点是一个空心红点,表示非命中断点。

3)鼠标右键单击红色断点,会d出调试快捷菜单,里面会有更丰富的断点命中条件设定,不多说了,楼主自己可以试一下。

4)断点命中后,可以按F5继续运行,如果后面还有断点,就可以被命中。

5)如果在上面的例子中7设了断点后,程序执行到该处停下时,7这行的代码是还未被执行的,这个时候j应该等于3,不是5.

6)如果断点被命中之后,并不想让程序继续执行下去,而只想让程序运行被设断点的这一行,那么只要按F10就可以了。如上面的例子中7设了断点后,程序运行到这里停止,接下去按F10,程序还是会停下,这个时候的程序状态是运行完j +=2的状态,即j等于5.

7)断点不是万能的,如在画窗口的OnDraw函数里是不能设断点的,一设断点,程序停了下来,然后按F5继续执行,由于程序被中断后继续运行,窗口需要被画到屏幕上,这个时候又会触发OnDraw函数,并且断点又会被命中,形成死循环。在很多地方是不能设断点的。相应的情况还有多层嵌套的DLL调用。

8)用TRACE、TRACE0、TRACE1、TRACE2等宏,将调试信息打印到“输出窗口”中。TRACE后面的数字代表带几个参数,如int j = 3TRACE1(_T("now without F9 in the function OnDraw, we can get debug_info j equals to %d\n"), j)这样在输出窗口中就可以得到在OnDraw函数中代码的执行情况。

9)MFC有个库类专门是将调试信息打印到“输出窗口”中的, CDumpContext的一个对象实例为afxDump。

使用方法:

#ifdef _DEBUG

int j = 3

LPCTSTR pText = _T("more method for debug")

afxDump <<pText <<_T(" j = ") <<j <<_T("\n")

#endif

这个调试类是非常强大的,需要进行专门学习,深入的话,呵呵觉得是异常厉害!

10)TRACE宏默认无法打印UNICODE中文调试信息,要想打印UNICODE但不改变整个工程的字符集,可以在TRACE之前,写代码:

#include <locale.h>

_tsetlocale(LC_CTYPE, _T("chs"))

这样TRACE宏将能正确工作

以上都是我的一些常用调试技巧,有些很简单,有些调试技巧比较高级,需要另外进行学习。一开始,建议楼主多使用F9设断点。一定要保证断点被命中,这个时候楼主一定要看一下VC的菜单是有变化的,尤其是“调试”菜单,会多出很多菜单项,可以自己研究研究,还有就是断点命中后,VC窗口也会不一样的,会出现“输出”、“错误”、“监视”等调试窗口,可以试着把关心的程序变量,选中然后拖到监视窗口里,又会出现不一样的东西哦。还可以在监视窗口中写代码:“@err, hr”,代表的是程序线程的error变量。高级的还有反汇编窗口,寄存器窗口,内存窗口等用得相对少些。

好了,一般的基本上全在这里了。

----欢迎加入------c++部落------------Hello Word!--------

无论你是初学者还是专家,只要你热爱编程、交流、分享,c++部落因为你而精彩~

1、调试程序是验证程序的正确性。

2、程序调试主要有两种方法,即静态调试和动态调试。程序的静态调试就是在程序编写完以后,由人工“代替”“模拟”计算机,对程序进行仔细检查,主要检查程序中的语法规则和逻辑结构的正确性。实践表明,有很大一部分错误可以通过静态检查来发现。通过静态调试,可以大大缩短上机调试的时间,提高上机的效率。程序的动态调试就是实际上机调试,它贯穿在编译、连接和运行的整个过程中。根据程序编译、连接和运行时计算机给出的错误信息进行程序调试,这是程序调试中最常用的方法,也是最初步的动态调试。在此基础上,通过“分段隔离”、“设置断点”、“跟踪打印”进行程序的调试。实践表明,对于查找某些类型的错误来说,静态调试比动态调试更有效,对于其他类型的错误来说刚好相反。因此静态调试和动态调试是互相补充、相辅相成的,缺少其中任何一种方法都会使查找错误的效率降低。

注:可以通过参考资料的连接了解更多调试的内容。

方法/步骤

1、首先下载好visual

basic6.0,这个在百度上搜一下就可以,好多链接都可以进去下载。当然如果要专业的还是要购买正版的好。

2、逐语句检查

主要检查每一句代码的顺序是否正确输入,语意是否符合要求。通读全部代码,考虑每一个子过程以及每一条语句什么时候被执行,必要的时候可以在程序段中插入print语句打印查看,也可以将语句注释掉进行调试。

3、对象属性设置检查

通过观察现象,检查错误出现原因,是否是因为某个对象的属性设置问题。

4、逐过程检查

主要检查代码是否写对,位置有没有错误,确定一段代码是在哪个事件控制之下的。先在脑海中将程序的整个过程梳理一遍,想想会有哪些事件发生和每个事件发生之后的效果。

5、设计测试程序数据

对于运用数据量较大的程序,可以通过给出一组测试数据来进行调试,这些数据应该覆盖程序中可能出现的所有情况。如果有一组数据输入后出现错误,则说明程序中存在错误。

6、用“单步跟踪法”调试

点击“调试”,然后单击“逐语句”,启动程序。单击程序窗体显示代码,代码窗口中的黄色光标条指示下一条要执行的语句。不断单击逐语句,程序就会一条一条的执行。

7、使用“立即窗口”和“stop语句”调试

该方法用于循环语句的检查。就是在先在程序的适当位置使用debug.print语句将要显示的内容显示在立即窗口,然后在适当位置插入stop语句。这样程序运行到stop就会停止。按F5继续执行,这样反复测试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12195898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存