GNU/linux gdb调试器的使用 及 makefile编译多个目标

1.简介    GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个 gdb 的前端图形工具,称为 xxgdb。

gdb 是功能强大的调试程序,可完成如下的调试任务:

* 设置断点;

* 监视程序变量的值;

* 程序的单步执行;

* 修改变量的值。   

在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。

可在 makefile 中如下定义CFLAGS 变量:CFLAGS = -g

运行 gdb 调试程序时通常使用如下的命令:gdb progname   

在 gdb 提示符处键入help,将列出命令的分类,

主要的分类有:

* aliases:命令别名*

breakpoints:断点定义;

* data:数据查看;

* files:指定并查看文件;

* internals:维护命令;

* running:程序执行;

* stack:调用栈查看;

* statu:状态查看;

* tracepoints:跟踪程序执行。

键入 help 后跟命令的分类名,可获得该类命令的详细清单。

2.gdb 的常用命令               

 表 1-4  常用的 gdb 命令命令           

             解释break NUM               在指定的行上设置断点。bt                      显示所有的调用栈帧。该命令可用来显示函数的调用顺序。clear                   删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。continue                继续执行正在调试的程序。该命令用在程序由于处理信号或断点而                        导致停止运行时。display EXPR            每次程序停止后显示表达式的值。表达式由程序定义的变量组成。file FILE               装载指定的可执行文件进行调试。help NAME               显示指定命令的帮助信息。info break              显示当前断点清单,包括到达断点处的次数等。info files              显示被调试文件的详细信息。info func               显示所有的函数名称。info local              显示当函数中的局部变量信息。info prog               显示被调试程序的执行状态。info var                显示所有的全局和静态变量名称。kill                    终止正被调试的程序。list                    显示源代码段。make                    在不退出 gdb 的情况下运行 make 工具。next                    在不单步执行进入其他函数的情况下,向前执行一行源代码。print EXPR              显示表达式 EXPR 的值。3.gdb 使用范例-----------------清单  一个有错误的 C 源程序 bugging.c-----------------#include <stdio.h>#include <stdlib.h>static char buff [256];static char* string;int main (){    printf ("Please input












1.makefile编译多个目标。
我们知道makefile通常把第一个目标作为终极目标。当make命令时
会把第一个目标当成终极目标。
make的最终目标是makefile中的第一个目标,而其它目标一般是由这个目标连带出来的。这是make的默认行为。当然 ,一般来说,你的makefile中的第一个目标是由许多个目标组成,你可以指示make,让其完成你所指定的目标。要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如前面提到的“make clean”形式)
使用指定终极目标的方法可以很方便地让我们编译我们的程序,例如下面这个例子:

.PHONY: all
all: prog1 prog2 prog3 prog4   
或者直接   all: pr1 pr2 pr3 pr4

从这个例子中,我们可以看到,这个makefile中有四个需要编译的程序——“prog1”, “prog2”, “prog3”和 “prog4”,我们可以使用“make all”命令来编译所有的目标(如果把all置成第一个目标,那么只需执行“make”),我们也可以使用“make prog2”来单独编译目标“prog2
”。

2.拓展应用。
即然make可以指定所有makefile中的目标,那么也包括“伪目标”,于是我们可以根据这种性质来让我们的makefile根据指定的不同的目标来完成不同的事。在Unix世界中,软件发布时,特别是GNU这种开源软件的发布时,其makefile都包含了编译、安装、打包等功能。我们可以参照这种规则来书写我们的makefile中的目标。

“all”
这个伪目标是所有目标的目标,其功能一般是编译所有的目标。
“clean”
这个伪目标功能是删除所有被make创建的文件。
“install”
这个伪目标功能是安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中去。
“print”
个伪目标的功能是例出改变过的源文件。
“tar”
个伪目标功能是把源程序打包备份。也就是一个tar文件。
“dist”
这个伪目标功能是创建一个压缩文件,一般是把tar文件压成Z文件。或是gz文件。
“TAGS”
这个伪目标功能是更新所有的目标,以备完整地重编译使用。
“check”和“test”
这两个伪目标一般用来测试makefile的流程。

当然一个项目的makefile中也不一定要书写这样的目标,这些东西都是GNU的东西,但是我想,GNU搞出这些东西一定有其可取之处(等你的UNIX下的程序文件一多时你就会发现这些功能很有用了),这里只不过是说明了,如果你要书写这种功能,最好使用这种名字命名你的目标,这样规范一些,规范的好处就是——不用解释,大家都明白。而且如果你的makefile中有这些功能,一是很实用,二是可以显得你的makefile很专业

你可能感兴趣的:(File,kill,input,工具,makefile)