Linux筆記--4 -- GDB和makefile

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
發佈了34 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章