今天看了第四章,按照這個速度真是夠嗆能看完,還是要提高一下自己的效率啊。。
assert.h
利用assert.h除錯,通過檢測變數值來確定程式執行過程中的問題
c
#include <stdio.h> #include <assert.h> int main() { int x = -1; assert(x > 0); return 0; }
變數交換
c
#include <stdio.h> void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } void output(int a, int b) { printf("a: %d, b: %d ", a, b); } int main() { int a = 1, b = 2; output(a, b); swap(&a,&b); output(a, b); return 0; }
使用gdb除錯程式
- 編譯選項
gcc temp.c -g
- 執行
gdb a.out
- 顯示變數
p $
- 檢視呼叫棧
bt
段錯誤和棧溢位
使用size
命令來檢視執行檔案中段大小
text data bss dec hex filename
1320 280 4 1604 644 3-8
分別是正文段,資料段和bss段。
此外,區域性變數也是存放在堆疊段的,所以棧溢位不見得是遞迴呼叫過多,也可能是區域性變數太大(Stack Overflow)。
ulimit 檢視棧大小
Linux的棧大小通過ulimit命令修改,不過在比賽中似乎是不允許的。
使用ulimit -s
命令檢視棧大小,單位是KB