Linux笔记--4 -- GDB和makefile

来源:互联网 发布:淘宝拍摄摄影软件 编辑:程序博客网 时间:2024/05/29 13:01
2014-06-14


 GDB是GNU发布的一款功能强大的程序调试工具。GBD主要完成下面三个方面的功能:
    1,启动被调试程序。
    2,让被调试的程序在指定的位置停住。
    3,当程序被停住时,可以检查程序状态(如变量值)。


1,编译生成可执行文件
   gcc -g test.c -o test
2,启动GDB
       gbd test
     或者
       gdb
       file test
3,在 XXX 函数处设置断点
   break main (或者 b main)
4,运行程序
   run (或者 r)
5,单步运行
   next (n)
6,继续运行
   continue (c)
7,退出GDB
   quit (q)


*  list (l)                 查看程序
*  break (b) 函数名         在某函数入口处添加断点
*  break (b) 行号           在指定行添加断点
*  break (b) 文件名:行号   在指定文件的指定行添加断点
*  break (b) 行号 if 条件   当条件为真时,指定行号处断点生效,例 b 5 if i=10
                            当 i 等于 10 时第5行断点生效
*  info break               查看所有设置的断点
*  delete (d) 断点编号      删除断点
*  run (r)                  开始运行程序
*  next (n)                 单步运行程序(不进入子函数)
*  step (s)                 单步运行程序(进入子函数)
*  continue (c)             继续运行程序
*  print (p) 变量名         查看指定变量值
*  finish                   运行程序,直到当期函数结束
*  watch 变量名             对指定变量进行监控
*  quit (q)                 退出 gdb




==================================================================
    Makefile (术语)
规则:用于说明如何生成一个或多个目标文件,规则格式如下:
  
  targets:prerequisites
      command
  目标 依赖 命令  (命令前是 tab 键)


例: main.o:main.c
       gcc -c main.c


    在makefile中,规则的顺序是很重要的,因为,makefile中只应该有一个最终目标,
其他的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。
一般来说,定义在makefile中的目标可能会有很多,但是第一条规则中的目标将被确立
为最终的目标。
    make命令默认在当前目录下寻找名字为 makefile/Makefile的工程文件,当名字不为
这两者之一时,可以使用如下方法指定:
            make -f 文件名
    Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)
 例: .PHONY:clean
       clean:
          rm -f hello main.o
 ".PHONY"将"clean"目标声明为伪目标


     ====== 变量 =========
obj=main.o func1.o func2.0
hello:$(obj)
gcc $(obj) -o hello
obj为变量


在makefile中,存在系统默认的自动化变量
*   $^ : 代表所有的依赖文件
*   $@ : 代表目标
*   $< : 代表第一个依赖文件


例: hello:main.o func1.o func2.o
      gcc main.o fun1.o func2.o -o hello
===>>
     hello:main.o func1.o func2.o
        gcc $^ -0 $@


makefile中"#"字符后的内容被视作注释。
    
     @ :取消回显
例: hello:hello.c
      @gcc hello.c -o hello
0 0