除錯程式: gdb
#include
#include
int select_min_index(double data[], int N);
void swap(double x, double y);
int main(int argc, char *argv[]) {
int i, min;
double data[8];
for (i = 1; i <= argc; ++i) {
data[i] = atof(argv[i]);
}
for (i = 1; i <= argc; ++i) {
min = select_min_index(&data[i], argc-i);
swap(data[i], data[min]);
}
for (i = 1; i <= argc; ++i) {
printf(" %f", data[i]);
}
printf("\n");
return 0;
}
int select_min_index(double data[], int N) {
int j, min = 0;
for (j = 1; j < N; ++j) {
if (data[j] < data[min])
min = j;
}
return min;
}
void swap(double x, double y) {
double t;
t = x;
x = y;
y = t;
}
假設你要對 a.out 除錯, 可以下指令: gdb a.out 進入 gdb 之後有下列常用指令可用:
基本指令
quit: 結束
help: 求助 (可加指令名稱)
run: 執行程式 (可加餵給程式的命令列參數)
list: 列印程式本文 (可加列號或函數名稱)
print: 印出運算式的值
中斷指令
break 列號或函數名稱: 設定中斷點
info break: 看我們已設定了那些中斷點
disp 運算式: 每次中斷就顯示這個運算式
info disp: 看我們已設定了那些顯示式
next: 執行一列程式碼 (可加欲執行的列數)
step: 執行一列程式碼, 但是如果遇到函數呼叫, 要跳進函數裡去一步一步執行, 不要把整個函數呼叫當做一步來執行.
cont: 執行下去, 直到下一個中斷點或程式結束為止
用於運算式 (例如 print 及 disp 的參數) 中的特殊變數:
$: 前一次的運算式
$$: 兩次前的運算式
$7: 第七個運算式
$$7: 倒數第七個運算式
與堆疊有關的指令:
where: 顯示目前副程式層層呼叫的狀況
up: 往上一層
down: 往下一層
其他指令:
[CR]: 重複上一個動作
事實上大部分的指令只要沒有混淆之虞, 都不必完整地打完, 例如 info break 可以簡單地打 i b 就好了
沒有留言:
張貼留言