一.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>键
hello:hello.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下的注释用#号