C++ Builder初学问与答(廿二)

原创 2007年10月02日 11:28:00

作者:董维春 网名: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

通常我们使用单步执行程序开始应用程序的调试,因为这样程序执行到第一条语句就停止了。按下F8C++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命令,这时,汇编级调试窗口就显示出来了。

(未完,待续)

 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++Builder初学问与答

  • 2010-10-19 23:20
  • 849KB
  • 下载

BCB初学问与答适合初学者

  • 2011-06-28 07:47
  • 796KB
  • 下载

C++ const 的学问

1. const的最初动机是取代预处理器#define来进行值替代 #define只做些文本替代,它既没有类型检查概念,也没有类型检查功能,所以预处理器的值替代会产生一些问题。 这些问...

C++ builder 多进程串口通讯程序1 (项目分析)

总体实现过程:1.数据接收块  2.接收数据处理块  3.数据发送块,4.进程通讯块              其中还有数据加密,电台译码,硬件操作指令选择等等 1. 数据...

C++ Builder 基础知识总结中

1>    QuotedStr 函数是将一个字符串进行左右添加单引号。例如:abc->'abc'。 2>    获得某一个控件的值。例如:有一个控件TMemo *memo;   Str...

C++ Builder中的System::DynamicArray动态数组

C++Builder里面有动态数组,使用如下: //============================================== //数组长度 DynamicArray arra...

在 C++ Builder中利用串行通信控件编程

摘要:串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。本文介绍了在C++ Builder中如何利用串行通信控件进行串行通信编程。一、引言 目前,在用计算机进行数...

关于C++ Builder中TChart的一些用法

关于C++ Builder中TChart的一些用法 具体步骤: 一,拖控件,从控件组中拖出TChart控件. 二,双击TChart,按add添加所需数据组. 三,通过代...

C++ Builder 模拟键盘操作

键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键;按下后虽然看不到字符但会产生控制作用的按键...

C++ Builder VCL库函数学习

1. AllocMem   在队中分配指定字节的内存块,并将分配的每一个字节初始化为 0.函数原型如下:void * __fastcall AllocMem(Cardinal Size); Svn中文...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)