第十章、调试PASCAL程序
调试运行PASCAL语言程序是非常重要的,往往编一个程序不困难,但如果程序出错,要从中找出错误,使程序能正确运行,得出正确答案是很困难的。PASCAL语言提供了很强大的调试功能,使我们能很方便的找出程序的错误。
一、 程序错误:
1、 编译错误:即语法错误。如:命令错写,少分号等等。此种错误在程序编译执行就能发现,而把光标停留在错误行上,并显示出错误信息,由用户修改。
2、 运行错误:如果没有语法错误。则程序可以运行,但在运行过程中也有可能出现错误,如程序结构不合理,打印语句错误等。此时,程序将中止运行,光标停留在错误语句处,并显示错误信息,等待用户修改。
3、 逻辑错误:如:程序递归出口设置不正确,逻辑判断设置错误,这样程序虽然能够正常运行,但运行结果却不正确,这是用户最难发现有错误,也是最难查找的错误,此时计算机也无任何错误信息。
二、TURBO PASCAL的集成调试器
在TURBO PASCAL语言集成环境中,我们可以非常方便地调试程序。
1、 暂停(CTRL+BREAK):在程序运行过程中,我们可用CTRL+BREAK暂停程序的运行,此时集成环境会在当前运行到的语句上设置一条光带,表示程序可继续运行。此时,如果要程序继续执行(接着刚刚中断的语句),可用CTRL+F9(即RUN功能)继续运行程序;如果不需程序继续运行,可用CTRL+F2清除光带,这样程序将不能被继续运行。
2、 跟踪(F7):菜单RUN|TRACE INTO功能能够逐步运行程序,即使在过程中也能爱步运行。
3、 跟踪(F8):菜单RUN|STEP功能能够使我们逐段运行程序,即子程序中的语句将不会逐步执行。
4、 执行到光标处(F4):把光标移到要执行到的语句行,再用F4(菜单RUN|GOTO CRUSOR)可让程序执行到该行暂停。
5、 断点:我们可用DEBUG|BREAKPOINT功能在光标处行设置程序断点,这样,当程序运行到这里时将自动暂停。清除断点也用此功能。
6、 查看变量或表达式值(CTRL+F4):我们可以在程序未运行、运行暂停、运行结束后用此功能查看变量或表达式的值。
7、 设置动态变量查看(CTRL+F7):我们可用此功能打开WATCH窗口,在此窗口中增加要查看的变量,这样,我们在用F7或F8或在程序暂停时,就能在此窗口中看到要查看的变量的值。
8、 集成环境中的窗口操作:TURBO PASCAL语言是类似WINDOWS的,也可提供多窗口操作。如:用F3功能打开一个文件,再用F3功能打开一个文件,这时,我们就打开了两个窗口。此时,可用F6在各个窗口之间切换;用ALT+F3可把当前窗口关闭;用CTRL+F5可进入改变窗口大小、位置状态,此时,可用光标键上下左右移动当前窗口,也可用SHIFT+光标键来改变窗口大小。这样,我们就能在屏幕上同时看到文件窗口、WATCH窗口、OUTPUT窗口等。
9、 记录文件运行编译环境(CTRL+OO):因为PASCAL语言是在集成环境中来运行程序,而各台计算机的集成环境设置有可能不同,这样就使得一个文件在一台机器上运行正常,而在另一台机器上运行不正常或不能运行。所以,我们一般都会在程序的
第一行用CTRL+OO键来记录下当前的程序运行环境,这此在屏幕当前行会出现两行语句,都是用“{}”括住,以“$”引导,尤其是第二行是非常重要的,如:{$16384,0,655350};是指程序中允许最多打开16384个栈,这如果是在做一些搜索问题时是不够的,所以我们都会把它改成最大的数值:65520,请大家记住这个数值,这是PASCAL语言允许打开的最大栈数。
附录一 错误信息(略)
附录二、常用ASCII码表
代码 |
字符 |
代码 |
字符 |
代码 |
字符 |
代码 |
字符 |
代码 |
字符 |
32 |
|
52 |
4 |
72 |
H |
92 |
|
112 |
p |
33 |
! |
53 |
5 |
73 |
I |
93 |
] |
113 |
q |
34 |
” |
54 |
6 |
74 |
J |
94 |
^ |
114 |
r |
35 |
# |
55 |
7 |
75 |
K |
95 |
_ |
115 |
s |
36 |
$ |
56 |
8 |
76 |
L |
96 |
` |
116 |
t |
37 |
% |
57 |
9 |
77 |
M |
97 |
a |
117 |
u |
38 |
& |
58 |
: |
78 |
N |
98 |
b |
118 |
v |
39 |
’ |
59 |
; |
79 |
O |
99 |
c |
119 |
w |
40 |
( |
60 |
< |
80 |
P |
100 |
d |
120 |
x |
41 |
) |
61 |
= |
81 |
Q |
101 |
e |
121 |
y |
42 |
* |
62 |
> |
82 |
R |
102 |
f |
122 |
z |
43 |
+ |
63 |
? |
83 |
S |
103 |
g |
123 |
{ |
44 |
, |
64 |
@ |
84 |
T |
104 |
h |
124 |
| |
45 |
- |
65 |
A |
85 |
U |
105 |
i |
125 |
} |
46 |
. |
66 |
B |
86 |
V |
106 |
j |
126 |
~ |
47 |
/ |
67 |
C |
87 |
W |
107 |
k |
|
|
48 |
0 |
68 |
D |
88 |
X |
108 |
l |
|
|
49 |
1 |
69 |
E |
89 |
Y |
109 |
m |
|
|
50 |
2 |
70 |
F |
90 |
Z |
110 |
n |
|
|
51 |
3 |
71 |
G |
91 |
[ |
111 |
o |
|
|
附录三、TURBO PASCAL 7.0集成环境的主要菜单项
一、 FILE菜单
1、 OPEN(F3):装入一个已经存在于磁盘上的文件(也可以是非PASCAL源程序文件,如文本文件)。
2、 NEW:新建一个文件,文件名为NONAME.PAS。
3、 SAVE(F2):当前编辑的文件存盘。
4、 SAVE AS…:把当前文件存成另外一个文件名。
5、 SAVE ALL:保存已经打开的所有文件。
6、 CHANGE DIR…:改变当前目录。
7、 PRINT:打印当前文件。
8、 PRINTER SETUP:打印机设置。
9、 DOS SHELL:DOS外壳,暂时退出集成环境,进入DOS环境,可用EXIT命令回到集成环境。
10、 EXIT(ALT+X):退出TURBO PASCAL语言集成环境。
二、EDIT菜单
1、 UNDO(ALT+BACKSPACE):取消刚才的操作。
2、 REDO:重复进行刚才的操作。
3、 CUT(SHIFT+DEL):把定义的块删除,存放到剪贴板中。(定义块:用鼠标拖曳或用SHIFT+光标键)
4、 COPY(CTRL+INS):把定义的块拷贝到剪贴板中。
5、 PASTE(SHIFT+INS):把剪贴板中语句粘贴到当前光标位置。
6、 CLEAR(CRTL+DEL):把定义的块删除掉。
7、 SHOW CLEPBOARD:显示剪贴板中的语句。
三、SEARCH菜单
1、 FIND:寻找。
2、 REPLACE:寻找替换。
3、 SEARCH AGAIN:继续寻找。
4、 GO TO LINE NUMBER:到某个行号。
5、 SHOW LAST COMPILER:显示最后一次编译的错误。
6、 FIND ERROR:查找当前文件的错误。
7、 FIND PROCEDURE:查找过程。
四、RUN菜单
1、 RUN(CTRL+F9):运行当前程序。
2、 STEP OVER(F8):逐句运行程序,但运行过程或函数时不逐句。
3、 TRANCE INTO(F7):逐句进行程序,运行。
4、 GO TO CURSOR(F4):运行到光标位置。
5、 PROGRAM RESET(CTRL+F2):重设当前程序运行指针。
6、 PARAMETERS:设置命令行参数。
五、COMPILE菜单
1、 COMPILE(ALT+F9):编译当前程序,但没有生成EXE文件。
2、 MAKE(F9):编译当前文件,是否生成EXE文件要看DESTINATION项的设置。
3、 BUILD:与MAKE基本相同。但BUILD会不论单元是否编译过都会重新编译。
4、 DESTINATION:编译目标,在此项上用回车键可在MEMORY与DISK之间切换,为DISK时,编译时会在磁盘上生成EXE文件。
5、 PROMARY FILE…:指定主文件,如果指定,编译时将先编译主文件,如果不指定,编译时只编译当前文件。
6、 CLEAR PRIMARY FILE:删除指定的主文件。
7、 INFORMATION:显示编译信息。
六、DEBUG菜单
1、 BREAKPOINTS…:断点删除、设置功能。
2、 CALL STACK(CTRL+F3):定位当前的栈。
3、 REGISTER WATCH:查看寄存器值。
4、 OUTPUT:查看输出。
5、 USER SCREEN(ALT+F5):查看输出屏幕。
6、 EVALUATE/MODIFY…(CTRL+F4):查看或修改程序运行中过程中的变量或表达式的值。
7、 ADD WATCH…(CTRL+F7):增加要查看的内存变量名。
8、 ADD BREAKPOINT…:增加断点。
七、TOOLS菜单
1、 OPTIONS菜单:
(1) COMPILER…:设置编译器选项。
- RANGE CHECKING:设为ON时,编译时将检查所有数组、字符串和下标变量的值是否越界。
- STACK CHECHING:设为ON时,编译执行时将检查堆栈是否够用。
- I/O CHECKING:设为ON时,将检查输入输出错误。
- FORCE FAR CALLS:设为ON时,将允许远程调用。
- OVERLAYS ALLOWED:设为ON时,允许覆盖一个单元。
- ALIGN DATA:数据存放以字节对齐或是字对齐。
- VAR-STRING CHECKING:设为ON时,则每当一个串被当作变量参数传递时,TURBO PASCAL都将检查。
- BOOLEAN EVALUATION:设置布尔表达式计算方式:完全(COMPLETE)和短路(SHORT CIRCUIT)。
- NUMERIC PROCESSING:设置数字协处理器。设为8087/80287时,可以利用TURBO PASCAL支持的浮点运算的数据类型(SINGLE、DOUBLE、EXTENDED、COMP);设为SOFTWARE时则只能用REAL类型。能否设为8087/80287要视EMULATION的设置。
- EMULATION:设为ON时,可以在上一设置中设置8087/80287来提高运算精度与速度。
- DEBUG INFORMATION:设为ON时,将产生单步调试的代码。
- LOCAL SYMBOLS:设为ON时,允许用户检查局部符号。
- CONDITIONAL DEFINES:定义编译指令。
(2) MEMORY SIZES:设置程序运行中允许使用的最大栈数,最小堆数与最大堆数。即我们用CTRL+OO时得到的第一行配置。
(3) LINKER:设置链接选项菜单。
(4) DEBUGGER:设置调试菜单。
(5) DIRECTORIES:设置各种文件的搜索目录。
- TURBO DIRECTORY:告诉PASCAL语言到哪个目录中寻找TURBO.HLP及TURBO.TP文件。
- EXE & TPU DIRECTORY:指定EXE、TPU、MAP文件的存放目录。
- INCLUDE DIRECTORIES:指定包含文件的目录。
- UNIT DIRECTORIES:指定单元目录。
- OBJECT DIRECTORIES:指定外部OBJ文件的存放目录。
2、 TOOLS…:工具设置。
3、 ENVIONMENT:集成环境选项:
- PREFERENCES:环境设置。
- EDITOR:设置编辑器。
- MOUSE:设置鼠标。
- STARTUP:设置启动状态。
- COLORS:设置环境颜色。
4、 OPEN:打开一个集成环境配置文件。
5、 SAVE TURBO.TP:把当前的设置存成TURBO.TP文件,即系统默认文件。
6、 SAVE AS:存成另起名的配置文件。
八、WINDOW菜单
1、 TILE,CASCADE:层叠或平铺已打开的窗口。
2、 CLOSE ALL:关闭所有的窗口。
3、 REFRESH DISPLAY:重新刷新显示。
4、 SIZE/MOVE(CTRL+F5):改变窗口大小(SHIFT+光标键)及移动窗口(光标键)。
5、 ZOOM(F5):把当前窗口最大化。
6、 NEXT(F6):切换到下一个窗口。
7、 PREVIOUS(SHIFT+F6):切换到上一窗口。
8、 CLOSE(ALT+F3):关闭当前窗口。
9、 LIST…(ALT+0):列出已经打开的窗口。
九、HELP菜单
大家用F1或SHIFT+F1可得到帮助。