0117嵌入式学习

调试器 -----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 文件对当前用户可以执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值