歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> LinuxC編程工具介紹(一)

LinuxC編程工具介紹(一)

日期:2017/3/3 12:40:08   编辑:Linux技術

在實際的開發中,C語言代碼除了符合最基本的語法規范之外還必須符合設計者的邏輯意圖,如果發現生成的可執行文件運行結果不正確,則可以通過相應的調試環境來跟蹤調試,因此需要用到gdb

監視程序中變量的值

設置斷點以使程序在指定的代碼上停止執行

一行行的執行代碼

一.GDB篇

gdb基本命令

命令說明file裝入想要調試的可執行文件kill終止正在調試的內容list列出產生執行文件的源代碼next執行一行源代碼,但是不進入函數的內部step執行一行源代碼,但是進入函數的內部run執行當前被調試的程序quit退出gdbwatch監視一個變量的值make不退出gdb而重新產生可執行文件call name(args)調用並執行名為name參數為args的函數return value停止當前執行的函數,並將value返回給調用著break在代碼中設置斷點,是程序到此處時掛起

使用

1.調用gdb一般只需要一個參數
[code]gdb <可執行文件名>

2.一旦調試的程序出現錯誤,會在當前目錄下產生核心內存映像core文件,可以在調用時指定一個core文件

[code]gdb <可執行文件名> core
3.制定進程號的執行方式

[code]gdb <可執行的文件名> <進程號>
3.應用實例

[code]lancao@lancao:~/AndroidGreammer/WorkSpace/C++/day_02$ gcc hello.c //編譯C語言源程序
lancao@lancao:~/AndroidGreammer/WorkSpace/C++/day_02$ ls
a.out  hello.c  //a.out為編譯生成的可執行文件
lancao@lancao:~/AndroidGreammer/WorkSpace/C++/day_02$ gdb a.out //開始調試程序
-----------
(gdb) b main                            //在主函數處設置斷點
Breakpoint 1 at 0x40050a
(gdb) run                               //開始執行程序
Starting program: /home/lancao/AndroidGreammer/WorkSpace/C++/day_02/a.out 

Breakpoint 1, 0x000000000040050a in main ()
(gdb) n                             //執行下一行
Single stepping until exit from function main,
which has no line number information.
__libc_start_main (main=0x400506 <main>, argc=1, argv=0x7fffffffe1d8, 
    init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, 
    stack_end=0x7fffffffe1c8) at libc-start.c:321
321 libc-start.c: No such file or directory.        //此行程序無輸出
(gdb) n                                             //繼續執行下一行
Hello World[Inferior 1 (process 6094) exited normally]      //輸出Hello World
(gdb) quit                                                  //推出gdb
$

二.項目管理工具make

1.簡單是實例

1).新建一個hello.c

[code]//hello.c的代碼
#include<stdio.h>
#include"hello.h"
int main(void){
printf("Hello World");
}
2).新建一個hello.h

[code]//這裡不做任何操作
void m();
3).編譯makefile文件

[code]#這裡寫注釋
#命令行前面必須加table空格
hello:hello.c hello.h
    gcc -o hello hello.c hello.h
4.接下來進行管理

[code]lancao@lancao:~$ make  //直接輸入make命令,會根據makefile文件信息進行執行文件
gcc -o hello hello.c hello.h        //系統執行的語句
lancao@lancao:~$ ls
hello  hello.c  hello.h  makefile       //目標文件生成

2.接下來我們看一個稍微復雜一點的makefile

[code] CC = gcc
 CFLAGS = -g -Wall//多文件批處理
Hello:hello hello2 hello3
    $(CC)$(CFLAGS) hello2 hello3 -o myprog
hello:hello.c hello.h
    $(CC)$(CFLAGS) hello.c hello.h -o hello
hello2:hello2.c
    $(CC)$(CFLAGS) hello2.c -o hello2
hello3:hello3.c hello3.h
    $(CC)$(CFLAGS) hello3.c hello3.h -o hello3

二.makefile中的變量

[code]DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./obj
DIR_BIN = ./bin
SRC = $(wildcard ${DIR_SRC}/*.c)  
OBJ = $(patsubst %.c,${DIR_OBJ}/%.o,$(notdir ${SRC})) 
TARGET = main
BIN_TARGET = ${DIR_BIN}/${TARGET}
CC = gcc
CFLAGS = -g -Wall -I${DIR_INC}

${BIN_TARGET}:${OBJ}
    $(CC) $(OBJ)  -o $@

${DIR_OBJ}/%.o:${DIR_SRC}/%.c
    $(CC) $(CFLAGS) -c  $< -o $@
.PHONY:clean
clean:
    find ${DIR_OBJ} -name *.o -exec rm -rf {}

(1)Makefile中的 符號的意思:

[code]  $@  表示目標文件
  $^  表示所有的依賴文件
  $<  表示第一個依賴文件
  $?  表示比目標還要新的依賴文件列表
(2)wildcard、notdir、patsubst的意思:

[code]  wildcard : 擴展通配符
  notdir : 去除路徑
  patsubst :替換通配符
 

autotools自動生成makefile文件

Copyright © Linux教程網 All Rights Reserved