本章重点:修饰符,gcc单步调试。
今天介绍一下C语言的几个修饰符 auto,register,static,extern
首先看auto:,自动的意思,在函数内部定义的变量成为局部变量。在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。 局部变量仅由其被定义的模块内部的语句所访问。换言之,局部变量在自己的代码模块之外是不可知的。切记:模块以左花括号开始,以右花括号结束。
对于局部变量,要了解的最重要的东西是:它们仅存在于被定义的当前执行代码块中,即局部变量在进入模块时生成,在退出模块时消亡。
定义局部变量的最常见的代码块是函数。
register: CPU有高速缓存即寄存器,速度非常快,但内存非常小,加这个修饰后,这个变量的存放位置就在register高速缓存里。一般用于频繁修改的全局变量~
static :静态变量,让一个变量长期有效,而不管其是在什么地方被申明。即使是在函数内声明 函数退出后它依然保存 静态变量其实在编译时就已经分配了空间,
它不存在于堆或栈,也因此数据能一直保留。
extern:外部的,当你主文件内要使用引入文件的变量是就要做这个声明 表示这个表里是外部引入的 方便排错 也防止文件过多变量名混乱
接下来学习一下MinGW中gcc的单步调试
首先gcc -g file生成调试用的可执行文件
gdb file 进入调试
break 设置断点
start 开始运行
基本gdb命令:
---------------------------------------------------------------------
命令 简写 功能
---------------------------------------------------------------------
file 装入想要调试的可执行文件.
kill k 终止正在调试的程序.
list l 列出产生执行文件的源代码的一部分.
next n 执行一行源代码但不进入函数内部.
step s 执行一行源代码而且进入函数内部.
continue c 继续执行程序,直至下一中断或者程序结束。
run r 执行当前被调试的程序.
quit q 终止 gdb.
watch 使你能监视一个变量的值而不管它何时被改变.
catch 设置捕捉点.
thread t 查看当前运行程序的线程信息.
break b 在代码里设置断点, 这将使程序执行到这里时被挂起.
make 使你能不退出 gdb 就可以重新产生可执行文件.
shell 使你能不离开 gdb 就执行 UNIX shell 命令.
print p 打印数据内容。
examine x 打印内存内容。
backtrace bt 查看函数调用栈的所有信息