调试器 -----gdb
调试器代码的二八规则
gdb的简介(功能)
调试器gdb的使用
编译器gcc(-g选项)
运行命令(run)
设置断点(break 行号,break函数名)
查看状态(print)
单步执行(next,step)
继续运行(finish,continue)
退出(quit)
调试器gdb调试段错误
学习GDB的三步走:
1、 学会使用GDB
2、 掌握GDB的场景的使用技巧(多任务,网络程序,内存管理,core,汇编程序)gdb使用详解
3、 实现gdb(实现一个调试器:应用程序)
当程序遇断点 可以检查程序状态 变量值
List(l) 查看源代码,接着上次的位置上往下列,每次列10行
list 行号 列出从第几行开始的源代码
list 函数名 列出某个函数的源代码
b 16 设置断点在第16行
break func 设置断点在func
info break 查看所有断点
r(run)
next(n)(单步运行)(不进入子函数)//C语言没有父子函数之分 其函数是并行的
step(s) 单步运行(进入子函数)
p(print) i 显示i的值
finish 运行当前函数 直到当前函数结束
watch 变量名 对指定变量进行监控
continue(c) 继续运行程序 到下一断点处停止
print(p) result 显示result的值
quit(q) 退出gdb
c 运行到下一个断点
Start 进入主函数
Set 设置变量值
Clear 清除所有断点
enable 使失效断点恢复
disable 使断点失效
gcc -g gdb_demo.c -o gdb_demo
gdb gdb_demo
gdb gdb_demo --tui
---------------------------------------------------------------------------------------------------------------------------------
Makefile
makefile是make读入的默认唯一配置文件,M m都有,默认使用makeflie
可以使用 make -f 文件名 人为选择配置文件
1、什么是工程?多个源文件+其他文件(图片+头文件+脚本文件)
2、工程管理器的作用:编译多个源文件?---gcc +所有源文件 -o 可执行文件 -》实行自动编译
3、make依赖于makefile文件
4、makefile文件是一种脚本文件(批处理)存在相关语法
5、makefile语法:
三要素:目标,依赖,命令{ 目标:最终生成的文件 依赖:生成目标时所需要的文件 命令:声称目标时,需要执行的命令
格式:
目标:依赖
(tab键) 命令
hello:hello.c
gcc hello.c -o hello
要创建的目标体所依赖的文件 创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头
一个makefile可以有多个规则 每个规则对应一个目标 最前的目标为终极目标
Target: dependency
(tab字符)command
Target(目标):通常是要产生的文件的名称
Dependency:指用来输入从而产生目标的文件
Command:是make执行的动作 一个规则可以有多条命令,每个命令占一行。命令行的第一个字符是Tab
伪目标
.PHONTY 伪目标声明
若有需求关系 被需求写在需求之下
通式 gcc $^ -o $@ ^表示省略
$^ 代表所有依赖文件
$ 代表第一个文件
例:
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
=》
hello: main.o func1.o func2.o
gcc $^ -o $@
.PHONY:clean
clean:
rm -f hello hello.o
执行顺序:
make:默认从第一个目标体开始执行
make+ 目标体:从对应的目标体执行
如果目标体后面依赖的的文件是一个目标的话,先执行依赖对应的目标,再执行目标体的命令;
echo 回显
@隐藏执行信息
---------------------------------------------------------------------------------------------------------------------------------
Shell文件
Shell 是命令解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
#! 沙棒
#!/bin/sh (程序必须以此行开始 必须在文件的第一行)
种类:
Bourne shell(sh)
Korn shell(ksh)
Bourne Again shell(bash)
C shell(包括csh and tcsh)
TENEX/TOPS C shell(tcsh)
主函数参数
语言标识符使用注意事项
1、标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。
2、不能把C语言关键字作为用户标识符,例如if,for,while等。
3、标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)。
4、标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写。
变量
在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: 变量名=值
取出变量值可以加一个美元符号($)在变量前面
BASH中的语句结尾不需要分号
int main(int argc,char * argv[])
{
Reutrn 0;
}
$#:传入脚本的命令行参数个数
$*:所有命令行参数值,在各个参数值间留有空格
$0:命令本身(shell文件名)
$1:第一个命令行参数
$2:第二个命令行参数
比较操作 整数操作 字符串操作
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt <
大于或等于 -ge
小于或等于 -le
为空 -z
不为空 -n
比较整数a和整数b是否相等:if[ $a = $b ]
比较整数a是否大于整数b:if[ $a –gt $b ]
比较字符串a和b是否相等: if[ $a = $b ]
判断字符串a是否为空:if[ -z $a ]
比较整数变量a是否大于b:if[ $a –gt $b ]
注意:1、在“[”和“]”两边都留有空格 2、在“=”两边也都有空格
-e 文件已存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行