今天看了第四章,按照这个速度真是够呛能看完,还是要提高一下自己的效率啊。。
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\n", 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。