可以将运行时检查与修复并继续功能一起使用,以便快速查出并修复编程错误。修复并继续功能提供了强大的组合功能,可以为您节省大量调试时间。以下是一个示例。
% cat -n bug.c
1 #include stdio.h
2 char *s = NULL;
3
4 void
5 problem()
6 {
7 *s = ’c’;
8 }
9
10 main()
11 {
12 problem();
13 return 0;
14 }
% cat -n bug-fixed.c
1 #include stdio.h
2 char *s = NULL;
3
4 void
5 problem()
6 {
7
8 s = (char *)malloc(1);
9 *s = ’c’;
10 }
11
12 main()
13 {
14 problem();
15 return 0;
16 }
yourmachine46: cc -g bug.c
yourmachine47: dbx -C a.out
Reading symbolic information for a.out
Reading symbolic information for rtld /usr/lib/ld.so.1
Reading symbolic information for librtc.so
Reading symbolic information for libc.so.1
Reading symbolic information for libintl.so.1
Reading symbolic information for libdl.so.1
Reading symbolic information for libw.so.1
(dbx) check -access
access checking - ON
(dbx) run
Running: a.out
(process id 15052)
Enabling Error Checking... done
Write to unallocated (wua):
Attempting to write 1 byte through NULL pointer
Current function is problem
7 *s = ’c’;
(dbx) pop
stopped in main at line 12 in file "bug.c"
12 problem();
(dbx) #at this time we would edit the file; in this example just copy
the correct version
(dbx) cp bug-fixed.c bug.c
(dbx) fix
fixing "bug.c" ......
pc moved to "bug.c":14
stopped in main at line 14 in file "bug.c"
14 problem();
(dbx) cont
execution completed, exit code is 0
(dbx) quit
The following modules in \Qa.out’ have been changed (fixed):
bug.c
Remember to remake program.
有关使用修复和继续功能的更多信息,请参见内存泄漏 (mel) 错误。