嵌入式C语言高级开发讲解(三)——调试工具gdb和脚本文件

gdb调试工具:

    首先编辑一个app.c文件,然后

使用命令:gcc -g app.c -o app(-g专门用于调试二进制文件)

                   gdb app 显示版本信息,然后进入gdb调试界面

                  输入命令run(运行程序)

gdb list(8) :列出代码(以10行为单位)(以第8行开始)

   quit :tu  退出

命令行参数./test( 这里面写参数)

gdb -args tesrt :调试带命令行参数

gdb中一些重要的命令汇总

llist                      l         列出代码

break                 b        设置断点(运行,让代码停在某一行)

run                      r         从头开始运行程序

continue             c        从停止出继续继续运行程序

next                     n        向前执行一句(不进入被调函数中)

step                     s        向前执行依据(可进入被调函数中)

return                   ret      从当前函数返回

print                      p        显示变量式表达式的值

quit                       q         退出gdb

break命令:

    gdb b  17  (17行打印一个断点)

    gdb b   add (add函数处打印一个断点)

    gdb info b (查看断点设置信息)

     gdb delete b+最前面的序号

     gdb print a(打印a变量的值)

     gdb print b(打印b变量的值)

 脚本文件———解析命令

命令:echo:输出一句话       &&:代表几行命令一起执行

shell:所有脚本文件都以.sh结尾,而且.shbu's不是文件后缀,只是为了方便辨认

创建文件 vim.hello.sh进入后,第一行都以    #!/bin/bash     开头( 必须是绝对路径 ,bash为解析器)

 脚本语言不需要编译,因为有bash 解析器。

#!/bin/bash 为一个bash 脚本

echo:输出

echo hello >test.txt(将hello写进test.txt 文件中,test.txt文件会自动创建),若紧接着再写echo world > test.txt ,则会覆盖掉之前写进去的hello.

要想不被覆盖,可以bian编写命令echo world>>test.txt(>>为追加符号)。

以下是一段输出代码,创建一个文件夹hello.sh

#!/bin/bash

hello = “helloworld”

echo ${hello} 或 echo $ hello

点击命令 ./hello.sh,运行得出helloworld

改进后:

 #!/bin/bash

hello="helloworld"

echo $0(第0个参数)

echo $1(第1个参数)

echo $2(第二个参数)

echo $3(第三个参数)

echo $#(输出参数个数)

echo $*(输出所有参数)

echo $?(程序返回值判断,0代表程序执行成功,1代表程序执行失败,若程序中return 100不为 0,则输出100)

点击命令./hello.sh asd asd  xfc 

输出参数 。。。

for 循环(这里不需要)不需要定义变量,可以直接使用)

建文件 circle.sh,点击命令 vim circle.sh

输入下面代码段

#!/bin/bash

for((i=0;i<5;i++));

do

     echo(tab)"helloworld"

done

点击命令:./circle.sh 输出:

helloworld

helloworld

helloworld

helloworld

helloworld

补充代码:

 for i  in {1..10}

do

     echo "jsetc"

done

输入命令./circle.sh:

helloworld

helloworld

helloworld

helloworld

helloworld

jsetc

jsetc

jsetc

jsetc

jsetc

jsetc

jsetc

jsetc

jsetc

jsetc

继续补充(把i当字符串循环)

 for i in a b c d(i分别等于a b c d)

do

      echo $i

done

输入./circle.sh :

b

c

d

利用脚本在三个目录中创建三个相同的.sh 文件代码

首先创建vim file.sh,编写命令代码

#!/bin/bash

for name in $1 $2 $3

do

 mkdir $name

 cd       $name

echo>$name.c"

#include

int main()

{

    printf(\"helloworld\\n"\);

    return 0;

}"

cd ..

done

退出编辑后,执行命令chmod 777 file.sh 对file.sh 更改权限。

输入命令:./file.sh aa bb cc(aa bb cc为目录名)

运行后会自动生成aa bb cc 目录,并且每个目录下有相对应的aa.c bb.c cc .c文件名。

判断(目录/文件 是否为空)

创建文件vim judge.sh 进入编辑

#!/bin/bash

PATH="/home/163/shell/file.sh"

if[(tab)-d ${PATH}(tab)];then(判断是否为目录)

echo(TAB)"是个目录"

fi

if[(TAB)-f ${PATH}(TAB)];then

echo (TAB)"是个文件"

fi

退出编辑后输入命令chmod 777 judge.sh 修改用户权限

./judge.sh (文件或目录名)

改进:

#!/bin/bash

PATH = $1

if[ ! -n $PATH ]; then(判断参数是否为空,如果不为空,则成立)

echo "输入有误"

exit 1

fi

if [ -d ${PATH}];then

   echo "是个目录"

 elif [ -f ${PATH}]; then

echo "是个文件"

fi

同理运行

case 语句

首先建立 vim case.sh

#!/bin/bash

echo "请输入一个字符"

read key

case "$key" in:

           [A-Z] ) : echo"大写字母";;

            [a-z] ) :  echo "小写字母";;

            [0-9] ):   echo "数字";;

            * ):echo "其他"

esac

./case.sh

export 命令:

export xxx = "abcd"

echo $ xxx

输出abcd

unset xxx(unset命令用于删除已定义的shell变量(包括环境变量)和shell函数。unset命令不能够删除具有只读属性的shell变量和环境变量)

echo $ xxx

则显示无

编译一个cc.c文件

gcc cc.c -o cc生成cc

只要运用mv cc /bin,则可以不用./命令,直接写cc则可以编译

第二种方法

使用命令:export PATH=$PATH:/bb(/bb为路径)将其添加到PATH中,也可以直接编译。

今天就整理到这里,敲了一个晚上。。。

 

你可能感兴趣的:(嵌入式C语言高级开发讲解(三)——调试工具gdb和脚本文件)