1. 程式人生 > >Gdb調試工具/ Makfile項目管理

Gdb調試工具/ Makfile項目管理

調用 linuxc pan bsp sta 自底向上 基本原則 更新 結束

gdb調試工具

gcc -g main.c -o main

常用命令

命令 簡寫 作用

help h 按模塊列出命令類

help class 查找某一類型的具體命令

list l 查看代碼,可跟行號和函數名

quit q 退出gdb

run r 全速運行程序

start 單步執行,運行程序,停在第一行執行語句

next n 逐過程執行

step s 逐語句執行,遇到函數,調到函數內執行

backtrace b 查看函數的調用棧幀和層級關系

info I 查看函數內部局部變量的數值

frame f 切換函數的棧幀

finish 結束當前函數,返回函數調用點

set 設置變量的值

run arvg[1] argv[2] 調試時命令行傳遞參數

print p 打印變量和地址

break b 設置斷點,可根據行號和函數名

delete d 刪除斷點 d breakpoints NUM

display 設置觀察變量

undisplay 取消觀察變量

continue 繼續全速運行剩下的代碼

enable breakpoints 啟用斷點

disable breakpoints 禁用斷點

x 查看內存x /20xw顯示20個單元,16進制,4個字節每單元

watch 被設置觀測點的變量發送修改時,打印顯示

i watch 顯示觀測點

core文件 ulimit -c 1024 開啟core文件,調試時gdb a.out core

set var 設置調試中變量的值 例如 n=10 set var n=100

gdb調試模式

gdb調試模式

run全速運行

start 單步調試

set follow-fork-mode child/parent #Makefile項目管理 跟蹤子進程和父進程

Makfile項目管理

項目代碼編譯管理

節省編譯項目時間

一次編寫終身受益

操作示例文件:add.c sub.c mul.c dive.c main.c

基本原則

三要素

目標

條件

命令

Makefile工作原理

分析各個目標和依賴之間的關系

根據依賴關系自底向上執行命令

根據修改時間比目標新,確定更新

如果目標不依賴任何條件,則執行對應命令,以示更新

clean

用途:清除編譯生產的中間.o文件和最終目標文件

make clean 如果當前目錄下有同名clean文件,則不執行clean對應的命令

偽目標聲明:.PHONY:clean

clean命令中的特殊符號

  • "-"此條命令出錯,make也會繼續執行後續的命令。如:"-rm main.o"
  • "@"不顯示命令本身,只顯示結果。如:"@echo"clean done ""

其他

-make默認執行第一個出現的目標,可通過make dst指定要執行的目標

-distclean目標

-install目標

-make -C指定目錄 進入指定目錄,調用裏面的Makefile

簡單使用MakeFile

python@ubuntu:~/linuxC/calc$ cat Makefile

#目標:依賴(條件)

# 命令

#階段一

#app:add.c sub.c dive.c mul.c main.c

# gcc add.c sub.c dive.c mul.c main.c -o app

#

#階段二

#app:add.o sub.o dive.o mul.o main.o

# gcc add.o sub.o dive.o mul.o main.o -o app

#add.o:add.c

# gcc -c add.c

#sub.o:sub.c

# gcc -c sub.c

#dive.o:dive.c

# gcc -c dive.c

#mul.o:mul.c

# gcc -c mul.c

#main.o:main.c

# gcc -c main.c

#階段三

# $@表示目標,$^表示所有依賴,$<表示依賴中的第一個

#obj=add.o sub.o mul.o dive.o main.o

#src = $(wildcard *.c)

#obj = $(patsubst %.c,%.o,$(src))

#target = app

#$(target):$(obj)

# gcc $^ -o $@

#%.o:%.c

# gcc -c $< -o $@

#階段四

CPPFLAGS= -Iinclude

CFLAGS= -g -Wall

LDFLAGS=

CC=gcc

#CC=arm-linux-gcc

src = $(wildcard *.c)

obj = $(patsubst %.c,%.o,$(src))

target = app

$(target):$(obj)

$(CC) $^ $(LDFLAGS) -o $@

%.o:%.c

$(CC) -c $< $(CFLAGS) $(CPPFLAGS) -o $@

.PHONY:clean

#徹底清除生生過程文件

clean:

-rm -f *.o

-rm -f app

#徹底清除生生過程文件和生成配置文件

distclean:

rm /usr/bin/app

install:

cp app /usr/bin

test:

@echo $(src)

@echo $(obj)

Gdb調試工具/ Makfile項目管理