还没写完!!!!!!!!!
一.程序的执行过程
- 1 预处理(进行宏替换)
- 2 编译(生成汇编)
- 3 汇编(生成机器可识别代码)
- 4 连接(生成可执行文件或库文件)
二.Linux编译器gcc使用
1.格式 :gcc [选项] 要编译的文件 [选项] [目标文件]
- 1.预处理(进行宏替换):gcc -E hello.c -o hello.i
- 2.编译(生成汇编): gcc -S hello.i -o hello.s
- 3.汇编(生成机器可识别代码):gcc -c hello.s -o hello.o
- 4.连接(生成可执行文件或库文件):gcc hello.o -o hello
2.gcc选项:
- -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
- -S 编译到汇编语言不进行汇编和链接
- -c 编译到目标代码
- -o 文件输出到 文件
- -static 此选项对生成的文件采用静态链接
- -g 生成调试信息。GNU 调试器可利用该信息。
- -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
- -O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 - -w 不生成任何警告信息。
- -Wall 生成所有警告信息。
二.Linux调试器-gdb使用
1.前情提要
- 程序的发布方式有两种,debug模式和release模式
- Linux gcc/g++出来的二进制程序,默认是release模式
- 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
2.使用
gdb binFile 退出: ctrl + d 或 quit
调试命令:
- list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。[重要]
- list/l 函数名:列出某个函数的源代码。
- r或run:运行程序。[重要]
- n 或 next:单条执行。[重要]
- s或step:进入函数调用[重要]
- break(b) 行号:在某一行设置断点[重要]
- break 函数名:在某个函数开头设置断点
- info break :查看断点信息。
- finish:执行到当前函数返回,然后挺下来等待命令
- print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
- p 变量:打印变量值。[重要]
- set var:修改变量的值
- continue(或c):从当前位置开始连续而非单步执行程序[重要]
- run(或r):从开始连续而非单步执行程序
- delete breakpoints:删除所有断点
- delete breakpoints n:删除序号为n的断点[重要]
- disable breakpoints:禁用断点
- enable breakpoints:启用断点
- info(或i) breakpoints:参看当前设置了哪些断点
- display 变量名:跟踪查看一个变量,每次停下来都显示它的值
- undisplay:取消对先前设置的那些变量的跟踪
- until X行号:跳至X行
- breaktrace(或bt):查看各级函数调用及参数
- info(i) locals:查看当前栈帧局部变量的值
- quit:退出gdb