2016.7.9 GDB功能 GDB指令 Makefile举例

一.GDB

   GDB功能:

           (1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 

           (2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 

           (3)当程序被停住时,可以检查此时你的程序中所发生的事。 

           (4)动态的改变你程序的执行环境。 

   1.GDB是一款GNU开发的调试器。

   2调试文件一定要加-g    gcc -g deno.c -o deno

   3. GDB指令

1.*重新运行调试的程序:

(gdb) run

2.*列出指定区域(n1到n2之间)的代码:

(gdb) list n1 n2

3.*执行下一步:

(gdb) next

这样,执行一行代码,如果是函数,会跳过函数。

(gdb) step

这样,执行一行代码,如果是函数,会进入函数。

4.*执行完当前函数返回到调用它的函数:

(gdb) finish

5.*在当前的文件中某一行(假设为6)设定断点:

(gdb) break 6

*设置条件断点:

(gdb) break 46 if testsize==100

这里,如果testsize==100就在46行处断点。

6.*显示当前gdb断点信息:

(gdb) info break

      7.*继续运行程序直接运行到下一个断点: 

      (gdb) continue 

      8.退出

      (gdb) continue 

      9.显示

     (gdb)list

      10.查看变量值

     (gdb)print

   4.如果出现段错误,gdb调试时停在哪一行表示哪一行出现。

5.①debug.c文件

#include<stdio.h>

#include"debug.h"

int main()

{

 debug_msg("hello world\n");

 char *ptr="hello world";

 ptr++;

 debug_msg("*ptr=%s\n",ptr);

*ptr='L';

return 0;

}

②debug.h文件

#ifndef __DEBUG__

#define debug_msg(fmt,args...)

#else

#define debug_msg(fmt,args...) printf(fmt,##args)

#endif

③运行结果

[root@localhost 0708]# gcc -Wall debug.c

[root@localhost 0708]# ./a.out

段错误

④如果输入

[root@localhost 0708]# gcc -Wall debug.c -D__DEBUG__

[root@localhost 0708]# ./a.out

hello world

*ptr=ello world

段错误

-D 往.c文件中宏定义

 

二.脚本文件--脚本语言

脚本:实现批处理

make 叫做工程管理器

touch makefile 创立makefile文件

-rm rf 删除

mkdir 创建目录

cd 进入  cd ..返回上一级

Makefile的组成:

1.需要生成的目标文件

2.生成目标文件所需要的以来文件

3.生成目标文件的编译规则命令行


 

Makefile规定在书写command命令行前必须加一个<Tab>键

hellohello.o       红色为目标    蓝色是依赖   紫色是文件

gcc hello.o -o hello

hello.o:hello.c             先把.c→变成.o文件→可执行文件

gcc -c hello.c

   举例

    vim add.c

    int add(int a,int b)

{

         return a+b;

}

 vim sub.c

int sub(int a,int b)

{

return a-b;

}

vim mul.c

int mul(int a,int b)

{

return a*b;

}

vim div.c

int div(int a,int b)

{

return a/b;

}

vim main.c

#include<stdio.h>

int main()

{

printf("%d\n",add(6,3));

printf("%d\n",sub(6,3));

printf("%d\n",mul(6,3));

printf("%d\n",div(6,3));

return 0;

}

vim main1.c

#include<stdio.h>

int main()

{

printf("%d\n",add(6,3));

printf("%d\n",sub(6,3));

return 0;

}

vim makefile

cal_2:main1.o add.o sub.o

gcc main1.o add.o sub.o -o  cal_2

cal_1:main.o add.o sub.o div.o mul.o

gcc main.o add.o sub.o div.o mul.o -o cal_1

main1.o:main1.c

gcc -c main1.c

main.o:main.c

gcc -c main.c

add.o:add.c

gcc -c add.c

sub.o:sub.c

gcc -c sub.c

mul.o:mul.c

gcc -c mul.c

div.o:div.c

gcc -c div.c

[root@localhost 0709]# make

make: “cal_2”是最新的。

[root@localhost 0709]# make cal_1

make: “cal_1”是最新的。

[root@localhost 0709]# ./cal_1

9

3

18

2

[root@localhost 0709]# ./cal_2

9

3

[root@localhost 0709]#

[root@localhost 0709]#

 

PHONY:clean

clean:

rm -f *.o cal

伪目标

 

Makefile都用大写

mkdir -p sub/src sub/png sub/doc sub/lib

 

总控Makefile:进入各个功能子目录里执行make命令,将所有的.o文件链接生成最终可执行的文件。

功能子目录Makefile:将src目录下的.c文件编译生成.o文件。

scripts 目录的Makefile:定义许多变量(相当于c语言的头文件)

 

先看scripts 的Makefile,再看总控 Makefile ,再看功能目录Makefile。

 

Makefile下的注释用#号

 

 

 

 

        

                                                                             

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值