作者:董维春 网名:ch_builder
(版权要求:请务必尊重知识产权,未经授权不要转载、摘录)
18 程序调试技术
30)问:在C++Builder中调试程序要做一些什么工作?
答:对于任何一种开发环境来说,调试器都是必不可少的。C++Builder在它的集成开发环境中内嵌了一个集成调试器,使用这个调试器可以完成大多数的调试任务。它可以完成断点设置、跟踪、查看变量、查看堆栈等功能。
在调试程序前,首先要保证编译程序会产生调试信息。虽然在缺省情况下,C++Builder会自动在编译时生成调试信息,但还是应该检查一下,选择Project菜单下的Options子菜单,选择Compile标签页,选中Debugging选项组中的Debug Information复选框。
调试器的主要是用来解决程序中出现的逻辑错误,通俗地讲就是程序地运行结果与预期结果不同,因此我们需要知道使用调试器地两个条件。
1. 运行,即通过了编译而且没有产生运行时错误
2. 运行结果不符合预期的结果
31)问:在C++Builder中怎样调试程序?
答:对于C++Builder中单步执行的命令是Run菜单的Step Over,或者按下F8键也可以实现同样功能,单步执行是调试程序中最常用的命令,该命令每次只执行一条语句。如果是过程调用或函数调用语句,那么这个命令不会进入它们的内部,而是一次执行完。如果要进入过程和函数内部可以使用Run菜单的Trace Into命令或者使用功能键F7
通常我们使用单步执行程序开始应用程序的调试,因为这样程序执行到第一条语句就停止了。按下F8键C++Builder开始调试程序,执行点所在的那条被加亮显示,同时语句的左侧还出现了一个箭头标志
为了说明问题,我们还是用前面编写的用户登记卡程序来讲解。
因为我们只编写了事件处理过程,而这些过程需要事件发生时才执行,所以一开始就单步执行程序是无法进入到事件处理过程中的,要使执行点能够进入到事件处理过程,必须在事件处理过程中增加断点。
32)问:那怎样设置断点呢?
答:设置断点有很多方法,既可以在调试前设置断点,也可以在调试期间设置断点。在设置断点的方法中有一种非常简单,就是在代码编辑窗口中,用鼠标单击代码行最左边的空白处,就可以给这一行代码设置一个断点。设置断点的方法还有,选择Run菜单,选择Add BreakPoint,选择Add Source BreakPoint,这时会弹出Add Source BreakPoint对话框,在这个对话框中,可以指定要产生断点的文件、行号,断点产生的条件以及程序第几次运行过该断点时会引起中断。例如Key==’A’,其中Key是程序中的变量。
现在,我们在编辑框的按键事件处理程序的第一行设置断点,在Condition一栏中输入条件
(Key==’A’)||(Key==’a’) 表示当按下键A的时候产生中断。
然后点击OK按钮,被设置了断点的行以红色为背景显示,而且在最左边的空白处显示了红色实心的点。
断点设置完成后,按F9键运行程序,程序启动后,在编辑框内输入字符串,当按下键A的时候,中断产生,系统又回到了调试界面。
当不需要使用断点时可以把断点删除。删除的方法与设置的方法基本相同。单击包括断点的代码行的最左边空白处就可以删除断点了。
33)问:在调试过程中,我想了解变量当前的值,怎么办?
答:要获得变量的当前值,就必须把变量增加到变量监视列表中。下面我将介绍怎样增加监视变量、删除监视变量、修改监视变量。
增加监视变量有两种方法,一种是打开代码窗口,并设置为当前窗口,然后选择Run菜单下的Add watch菜单,也可按下Ctrl+F5打开一个Watch Properties对话框,在expression组合框中输入要监视的变量表达式,编辑框Repeat Count用来确定数组中有多少个元素可以显示。这时数组名应该在Expression编辑框中输入。如果为0表示显示所有的元素。
编辑框Digits用来确定显示浮点数时,应该显示小数点后面多少位数字,缺省值为18。
如果选中复选框Enabled,则这个监视变量有效,如果暂时不需要使用这个变量,那么也可以不选这个复选框,使它无效。
对话框底部的单选按钮可以设置监视变量的显示格式,例如字符串格式、十六进制等,单击按钮OK就加入了监视变量。
还有一种方法更简单,在代码编辑窗口中,单击鼠标右键,打开快捷菜单,在菜单中选择Debug菜单,然后选择Add Watch at Cursor命令,那么光标所在位置的变量就被加入到监视列表中。
要删除监视变量,可以在监视列表中选择要删除的变量,然后在快捷菜单中选择Delete Watch命令删除它。
34)问:如果我希望在调试的过程中修改变量的值,应该怎么办呢?
答:这也很简单,选择Run菜单的Evaluate/Modify菜单,系统将弹出Evaluate/Modify对话框,在Expression组合框中选择输入希望修改值的变量名,点击Evaluate按钮,变量Key的值就会显示在Result域中,在New Value域中输入它的新的值,然后点击Modify按钮,就会在运行中改变它的值了。
35)问:还有什么调试方法需要我们了解的吗?
答:C++Builder还提供了一种迅速获得变量或者表达式值的方法,这种方法类似于tool-tip功能,就是在调试期间,当把鼠标光标在变量上停留一会儿,这个变量的值就会显示出来。
此外,如果要调试对象,将光标移动到对象的实例变量上,然后点击右键。选择Debug菜单,选择Inpsector命令项,这时对象的属性,方法和内部数据就显示出来了。
最后,如果你希望进行汇编级调试,C++Builder也能够完成,选择主菜单的View菜单,然后选择Debug Windows菜单,选择CPU命令,这时,汇编级调试窗口就显示出来了。
(未完,待续)