一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Linux下用C語(yǔ)言最基本的程序開(kāi)發(fā)與調(diào)試的詳細(xì)概述

C語(yǔ)言專家集中營(yíng) ? 來(lái)源:未知 ? 作者:易水寒 ? 2018-07-16 17:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.建一個(gè)目錄

2.寫代碼,建一個(gè)hello.c文件

代碼:

< class="ViewSource" rel="nofollow" style="box-sizing: border-box;outline: 0px;color: rgb(103, 149, 181);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/Yd5A7Cl21m4hiccZ4QpuUnPUuM8EQpfZdian4CriaHPzV0bXhbvnwoFkwHlKSoWRzRgxMERFP3oCtJxZz7icsLhIhQ/640?wx_fmt=gif");background-position: left top;background-size: initial;background-repeat: no-repeat;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: inherit;border-width: initial;border-style: none;border-color: initial;padding: 1px;margin-right: 10px;word-break: break-all;display: inline-block;width: 16px;height: 16px;text-indent: -2000px;" target="_self" title="view plain">view plain< class="CopyToClipboard" rel="nofollow" style="box-sizing: border-box;outline: 0px;color: rgb(103, 149, 181);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/Yd5A7Cl21m4hiccZ4QpuUnPUuM8EQpfZdAbOXa8oicYJW4EAmgLUH0SNj4v9wju4KzA76TP9yPJhEgxr0uX4icBIg/640?wx_fmt=gif");background-position: left top;background-size: initial;background-repeat: no-repeat;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: inherit;border-width: initial;border-style: none;border-color: initial;padding: 1px;margin-right: 10px;word-break: break-all;display: inline-block;width: 16px;height: 16px;text-indent: -2000px;" target="_self" title="copy to clipboard">copy to clipboard

#include"stdio.h"

main()

{

printf("HelloLinux.\n")

}

#include"stdio.h"

main()

{

printf("Hello Linux.\n")

}

記得最后一定要換行

3.編譯

gcc-ohellohello.c

使用gcc編譯器就會(huì)為我們生成一個(gè)hello的可執(zhí)行文件

4.輸出

執(zhí)行./hello就可以看到程序的輸出結(jié)果了.

是不是很簡(jiǎn)單?

命令行中g(shù)cc表示我們是用gcc來(lái)編譯我們的源程序,-o選項(xiàng)表示我們要求編譯器給我們輸出的可執(zhí)行文件名為hello而hello.c是我們的源程序文件.gcc編譯器有許多選項(xiàng),一般來(lái)說(shuō)我們只要知道其中的幾個(gè)就夠了.-o選項(xiàng)我們已經(jīng)知道了,表示我們要求輸出的可執(zhí)行文件名.-c選項(xiàng)表示我們只要求編譯器輸出目標(biāo)代碼,而不必要輸出可執(zhí)行文件.-g選項(xiàng)表示我們要求編譯器在編譯的時(shí)候提供我們以后對(duì)程序進(jìn)行調(diào)試的信息.知道了這三個(gè)選項(xiàng),我們就可以編譯我們自己所寫的簡(jiǎn)單的源程序了,如果你想要知道更多的選項(xiàng),可以查看gcc的幫助文檔,那里有著許多對(duì)其它選項(xiàng)的詳細(xì)說(shuō)明.

下面我們來(lái)演示怎樣用GDB來(lái)調(diào)試一個(gè)求0+1+2+3+…+99的程序:

/* Filename:hello.c */
#include "stdio.h"main(){int i, sum;sum = 0;for (i = 0; i < 100; i++){sum + = i;}printf("the sum of 1+2+...+ is %d", sum);}

執(zhí)行如下命令編譯hello.c(加-g選項(xiàng)產(chǎn)生debug信息):#gcc –g –ohello sum.c在命令行上鍵入gdb hello并按回車鍵就可以開(kāi)始調(diào)試sum了,再運(yùn)行run命令執(zhí)行sum

#gdb hello

list命令用于列出源代碼,對(duì)上述程序兩次運(yùn)行l(wèi)ist,將出現(xiàn)如上畫面(源代碼被標(biāo)行號(hào))。

根據(jù)列出的源程序,如果我們將斷點(diǎn)設(shè)置在第5行,只需在gdb 命令行提示符下鍵入如下命令設(shè)置斷點(diǎn):(gdb) break 5

設(shè)置斷點(diǎn)的另一種語(yǔ)法是 break ,它在進(jìn)入指定函數(shù)(function)時(shí)停住。相反的,clear用于清除所有的已定義的斷點(diǎn),clear 清除設(shè)置在函數(shù)上的斷點(diǎn), clear 則清除設(shè)置在指定行上的斷點(diǎn)。watch命令:watch命令用于觀查變量或表達(dá)式的值,我們觀查sum變量只需要運(yùn)行watch sum

watch 為表達(dá)式(變量)expr設(shè)置一個(gè)觀察點(diǎn),一量表達(dá)式值有變化時(shí),程序會(huì)停止執(zhí)行。要觀查當(dāng)前設(shè)置的watch,可以使用info watchpoints命令。next、step命令:next、step用于單步執(zhí)行,在執(zhí)行的過(guò)程中,被watch變量的變化情況將實(shí)時(shí)呈現(xiàn)(分別顯示Old value和New value)

next、step命令的區(qū)別在于step遇到函數(shù)調(diào)用,會(huì)跳轉(zhuǎn)到到該函數(shù)定義的開(kāi)始行去執(zhí)行,而next則不進(jìn)入到函數(shù)內(nèi)部,它把函數(shù)調(diào)用語(yǔ)句當(dāng)作一條普通語(yǔ)句執(zhí)行。

5.Makemake是所有想在Linux系統(tǒng)上編程的用戶必須掌握的工具,對(duì)于任何稍具規(guī)模的程序,我們都會(huì)使用到make,幾乎可以說(shuō)不使用make的程序不具備任何實(shí)用價(jià)值。在此,我們有必要解釋編譯和連接的區(qū)別。編譯器使用源碼文件來(lái)產(chǎn)生某種形式的目標(biāo)文件(object files),在編譯過(guò)程中,外部的符號(hào)參考并沒(méi)有被解釋或替換(即外部全局變量和函數(shù)并沒(méi)有被找到)。因此,在編譯階段所報(bào)的錯(cuò)誤一般都是語(yǔ)法錯(cuò)誤。而連接器則用于連接目標(biāo)文件和程序包,生成一個(gè)可執(zhí)行程序。在連接階段,一個(gè)目標(biāo)文件中對(duì)別的文件中的符號(hào)的參考被解釋,如果有符號(hào)不能找到,會(huì)報(bào)告連接錯(cuò)誤。編譯和連接的一般步驟是:第一階段把源文件一個(gè)一個(gè)的編譯成目標(biāo)文件,第二階段把所有的目標(biāo)文件加上需要的程序包連接成一個(gè)可執(zhí)行文件。這樣的過(guò)程很痛苦,我們需要使用大量的gcc命令。而make則使我們從大量源文件的編譯和連接工作中解放出來(lái),綜合為一步完成。GNU Make的主要工作是讀進(jìn)一個(gè)文本文件,稱為makefile。這個(gè)文件記錄了哪些文件(目的文件,目的文件不一定是最后的可執(zhí)行程序,它可以是任何一種文件)由哪些文件(依靠文件)產(chǎn)生,用什么命令來(lái)產(chǎn)生。Make依靠此makefile中的信息檢查磁盤上的文件,如果目的文件的創(chuàng)建或修改時(shí)間比它的一個(gè)依靠文件舊的話,make就執(zhí)行相應(yīng)的命令,以便更新目的文件。假設(shè)我們寫下如下的三個(gè)文件,add.h用于聲明add函數(shù),add.c提供兩個(gè)整數(shù)相加的函數(shù)體,而main.c中調(diào)用add函數(shù):

/* filename:add.h */extern int add(int i, int j);/* filename:add.c */int add(int i, int j){return i + j;}/* filename:main.c */#include "add.h"main(){int a, b;a = 2;b = 3;printf("the sum of a+b is %d", add(a + b));}

怎樣為上述三個(gè)文件產(chǎn)生makefile呢?如下:

test : main.o add.ogcc main.o add.o -o testmain.o : main.c add.hgcc -c main.c -o main.oadd.o : add.c add.hgcc -c add.c -o add.o

上述makefile利用add.c和add.h文件執(zhí)行g(shù)cc -c add.c -o add.o命令產(chǎn)生add.o目標(biāo)代碼,利用main.c和add.h文件執(zhí)行g(shù)cc -c main.c -o main.o命令產(chǎn)生main.o目標(biāo)代碼,最后利用main.o和add.o文件(兩個(gè)模塊的目標(biāo)代碼)執(zhí)行g(shù)cc main.o add.o -o test命令產(chǎn)生可執(zhí)行文件test。我們可在makefile中加入變量,另外。環(huán)境變量在make過(guò)程中也被解釋成make的變量。這些變量是大小寫敏感的,一般使用大寫字母。Make變量可以做很多事情,例如:i) 存儲(chǔ)一個(gè)文件名列表;ii) 存儲(chǔ)可執(zhí)行文件名;iii) 存儲(chǔ)編譯器選項(xiàng)。要定義一個(gè)變量,只需要在一行的開(kāi)始寫下這個(gè)變量的名字,后面跟一個(gè)=號(hào),再跟變量的值。引用變量的方法是寫一個(gè)$符號(hào),后面跟(變量名)。我們把前面的 makefile 利用變量重寫一遍(并假設(shè)使用-Wall -O –g編譯選項(xiàng)):

OBJS = main.o add.oCC = gccCFLAGS = -Wall -O -gtest : $(OBJS)$(CC) $(OBJS) -o testmain.o : main.c add.h$(CC) $(CFLAGS) -c main.c -o main.oadd.o : add.c add.h$(CC) $(CFLAGS) -c add.c -o add.o

makefile 中還可定義清除(clean)目標(biāo),可用來(lái)清除編譯過(guò)程中產(chǎn)生的中間文件,例如在上述makefile文件中添加下列代碼:

clean:rm -f *.o

運(yùn)行make clean時(shí),將執(zhí)行rm -f *.o命令,刪除所有編譯過(guò)程中產(chǎn)生的中間文件。不管怎么說(shuō),自己動(dòng)手編寫makefile仍然是很復(fù)雜和煩瑣的,而且很容易出錯(cuò)。因此,GNU也為我們提供了Automake和Autoconf來(lái)輔助快速自動(dòng)產(chǎn)生makefile,讀者可以參閱相關(guān)資料。7.小結(jié)本章主要闡述了Linux程序的編寫、編譯、調(diào)試方法及make,實(shí)際上就是引導(dǎo)讀者學(xué)習(xí)怎樣在Linux下編程,為后續(xù)章節(jié)做好準(zhǔn)備。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213777
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141714
  • 程序開(kāi)發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    10640
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    [推薦]linuxc語(yǔ)言編程簡(jiǎn)介

    第一章本章將簡(jiǎn)要介紹一什么是Linux,C語(yǔ)言的特點(diǎn),程序開(kāi)發(fā)的預(yù)備知識(shí),
    發(fā)表于 04-29 13:50

    LinuxC應(yīng)用程序開(kāi)發(fā)

    本文介紹了在 Linux能用于 C 應(yīng)用程序開(kāi)發(fā)調(diào)試的工具. 本文的主旨是介紹如
    發(fā)表于 05-14 10:16 ?4793次閱讀

    LinuxC語(yǔ)言編程概述

    分享到:標(biāo)簽:C語(yǔ)言編程 Linux 編譯鏈接器 調(diào)試器 操作系統(tǒng) 3.1 Linux
    發(fā)表于 10-18 14:36 ?0次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>編程<b class='flag-5'>概述</b>

    TMS320C54xC源調(diào)試詳細(xì)資料概述

    C調(diào)試器是幫助您的高級(jí)程序員接口。開(kāi)發(fā)、測(cè)試和細(xì)化C54 X程序
    發(fā)表于 04-27 15:42 ?2次下載
    TMS320<b class='flag-5'>C</b>54xC源<b class='flag-5'>調(diào)試</b><b class='flag-5'>詳細(xì)</b>資料<b class='flag-5'>概述</b>

    何在Linux如何刪除大量文件的詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在Linux刪除大量文件的過(guò)程詳細(xì)資料概述免費(fèi)下載。
    發(fā)表于 11-14 17:10 ?7次下載

    何在Win安裝linux的虛擬機(jī)詳細(xì)安裝方法資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在Win7安裝linux的虛擬機(jī)詳細(xì)安裝方法資料概述免費(fèi)下載。
    發(fā)表于 11-28 15:03 ?3次下載

    C語(yǔ)言程序設(shè)計(jì)教程之C語(yǔ)言基礎(chǔ)的詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言程序設(shè)計(jì)教程之C語(yǔ)言基礎(chǔ)的
    發(fā)表于 12-10 17:16 ?66次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>程序</b>設(shè)計(jì)教程之<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>基礎(chǔ)的<b class='flag-5'>詳細(xì)</b>資料<b class='flag-5'>概述</b>

    LINUX系統(tǒng)教程之如何在Linux系統(tǒng)進(jìn)行編程

    本文檔的主要內(nèi)容詳細(xì)介紹的是LINUX系統(tǒng)教程之如何在Linux系統(tǒng)進(jìn)行編程主要內(nèi)容包括了:程序
    發(fā)表于 12-18 19:09 ?9次下載

    嵌入式LinuxC編程知識(shí)要點(diǎn)匯總

    LinuxC語(yǔ)言有著很深的淵源,因?yàn)?b class='flag-5'>Linux本身就是C
    的頭像 發(fā)表于 01-18 14:27 ?3333次閱讀

    淺談嵌入式LinuxC語(yǔ)言編程知識(shí)要點(diǎn)

    LinuxC語(yǔ)言有著很深的淵源,因?yàn)?b class='flag-5'>Linux本身就是C
    的頭像 發(fā)表于 01-28 11:32 ?5013次閱讀

    何在Linux中使用gdb調(diào)試C程序

    如果你是 C/C++ 程序員,或者使用 Fortran 和 Modula-2 編程語(yǔ)言開(kāi)發(fā)軟件,那么你將會(huì)很樂(lè)意知道有這么一款優(yōu)秀的
    發(fā)表于 05-16 14:45 ?933次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>Linux</b>中使用gdb<b class='flag-5'>調(diào)試</b><b class='flag-5'>C</b><b class='flag-5'>程序</b>

    信號(hào)與定時(shí)器的使用在Linux系統(tǒng)C語(yǔ)言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是信號(hào)與定時(shí)器的使用在Linux系統(tǒng)C語(yǔ)言程序免費(fèi)下載。
    發(fā)表于 08-26 17:30 ?1次下載
    信號(hào)與定時(shí)器的使用在<b class='flag-5'>Linux</b>系統(tǒng)<b class='flag-5'>下</b>的<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>程序</b>免費(fèi)下載

    LinuxC語(yǔ)言編程入門教程詳細(xì)說(shuō)明

    本文是Linux C 語(yǔ)言編程入門教程。主要介紹了Linux 的發(fā)展與特點(diǎn)、C
    發(fā)表于 08-25 18:05 ?39次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>編程入門教程<b class='flag-5'>詳細(xì)</b>說(shuō)明

    嵌入式linux c語(yǔ)言,嵌入式LinuxC語(yǔ)言開(kāi)發(fā)工具.pdf

    2 章 嵌入式Linux C 語(yǔ)言開(kāi)發(fā)工具本章目標(biāo)任何應(yīng)用程序開(kāi)發(fā)都離不開(kāi)編輯器、編譯器及
    發(fā)表于 11-01 17:38 ?12次下載
    嵌入式<b class='flag-5'>linux</b> <b class='flag-5'>c</b><b class='flag-5'>語(yǔ)言</b>,嵌入式LinuxC<b class='flag-5'>語(yǔ)言</b><b class='flag-5'>開(kāi)發(fā)</b>工具.pdf

    如何使用linuxgdb來(lái)調(diào)試python程序

    如何使用linuxgdb來(lái)調(diào)試python程序? 在Linux,可以使用GDB(GNU
    的頭像 發(fā)表于 01-31 10:41 ?3241次閱讀