?? 檢出錯誤.c
字號:
檢出和分離c語言源程序錯誤的方法
我們知道,編譯程序可以找到源程序中的語法錯誤和語義錯誤,并將其分離出來,但她不能檢出程序編制的是否得當及算法是否正確。在c語言源程序調試過程中,比較麻煩的一種錯誤是程序可以執行,但得不到希望的結果,即使在算法正確的情況下,程序員也要從頭到尾的對整個程序檢查。找出錯誤的方法可以從一組檢查數據開始,把已知的數據送入程序,并把程序逐步劃小,直到找出錯誤所在并將其分離出來為止。這種方法大都采用在源程序中加入若干printf()語句來實現,通過檢查中間結果,就可能把出錯的原因找出來。但這種方法過于繁瑣復雜,使用不便。本文介紹一種解決這個問題的簡單方法,以起拋磚引玉的作用。
首先設計一個排錯函數debug(),這里假定編譯程序進支持整型,字符型,整型數組和字符型數組類型。如果編譯程序還值持其它的數據類型,稍加修改debug()函數即可。debug()函數如下:
/* function to print ints,chars,and int&char arrays*/
#include<stdio.h>
#include<conio.h>
#define CLEARS 111
void debug(char let,char c_array[],int n_array[],int asize,int num,int opt)
{
int i;
switch(opt)
{
case 1:
printf("The value is %d",num);
break;
case 2:
printf("The letter is %c",let);
break;
case 3: {
puts("The number array contains\n");
for(i=0;i<=asize;++i)
printf("%d",n_array[i]);
break;
}
case 4:{
puts("The character array contains\n");
for(i=0;i<=asize;++i)
printf("%c",c_array[i]);
break;
}
default:
puts("\nInvalid option selected!");
break;
}
puts("\tPlease press any key to continue:");
getch();
}
void main()
{
int i,j,a[10];
char ch,b[10];
for(i=5,j=0;i<15;++i,++j){
a[j]=j;
b[j]=j;
}
putchar(CLEARS);
ch='a';
debug(0,0,0,0,i,1); /*display value of i*/
debug(ch,0,0,0,0,2);/*display value of ch*/
debug(0,0,a,10,0,3);/*display value of a*/
debug(0,b,0,10,0,4);/*display value of b*/
debug(0,0,0,0,0,7);/*error*/
}
關于此函數的幾點說明:
debug()函數提供一個在排錯過程中把所需過程打印出來的方法,思想很簡單,即把要打印的數據類型傳遞給它,并由后面的printf()語句將其打印出來,調用getch()函數引起程序暫停運行,直到按任意鍵繼續。debug()參數包括了位是其工作所需內容(根據需要還可添加其它有關的參數)。opt是要使用的可選項。
實際應用時,把debug()函數包含進你的程序,把錯誤找出來后,可以很容易的把所有的debug()函數都清除出去。把所有這些調用和為包含函數debug()所用的#include從程序中撤銷是很容易的事。如vi編輯在“ex轉換方式”下使用的搜索并替換命令g和s),這些在源程序中使用printf()函數是很難辦到的。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -