Linux調試器-gdb使用以及Linux項目自動化構建工具-make/Makefile

目錄

  • 1.gdb背景
  • 2.開始使用gdb
  • 3.make/makefile 背景
  • 4.實例代碼
  • 5.依賴關系
  • 6.依賴方法
  • 7.原理
  • 8.項目清理

1.gdb背景

程序的發布方式有兩種,debug模式和release模式
Linux gcc/g++出來的二進制程序,默認是release模式
要使用gdb調試,必須在源代碼生成二進制程序的時候, 加上 -g 選項

2.開始使用gdb

gdb binFile 退出: ctrl + d 或 quit 調試命令:
ist/l 行號:顯示binFile源代碼,接著上次的位置往下列,每次列10行。
list/l 函數名:列出某個函數的源代碼。
r或run:運行程序。
n 或 next:單條執行。
s或step:進入函數調用
break(b) 行號:在某一行設置斷點
break 函數名:在某個函數開頭設置斷點
info break :查看斷點信息。
finish:執行到當前函數返回,然后挺下來等待命令
print§:打印表達式的值,通過表達式可以修改變量的值或者調用函數
p 變量:打印變量值。
set var:修改變量的值
continue(或c):從當前位置開始連續而非單步執行程序
run(或r):從開始連續而非單步執行程序
delete breakpoints:刪除所有斷點
delete breakpoints n:刪除序號為n的斷點
disable breakpoints:禁用斷點
enable breakpoints:啟用斷點
info(或i) breakpoints:參看當前設置了哪些斷點
display 變量名:跟蹤查看一個變量,每次停下來都顯示它的值
undisplay:取消對先前設置的那些變量的跟蹤
until X行號:跳至X行
breaktrace(或bt):查看各級函數調用及參數
info(i) locals:查看當前棧幀局部變量的值
quit:退出gdb

3.make/makefile 背景

會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力
一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作
makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。
make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構建

4.實例代碼

#include <stdio.h>
int main()
{
printf("hello Makefile!\n");
return 0;
}

Makefile文件 hello:hello.o gcc hello.o -o hello hello.o:hello.s gcc -c hello.s -o hello.o hello.s:hello.i gcc -S
hello.i -o hello.s hello.i:hello.c gcc -E hello.c -o hello.i

.PHONY:clean
clean:
rm -f hello.i hello.s hello.o hello

5.依賴關系

上面的文件 hello ,它依賴 hell.o
hello.o , 它依賴 hello.s
hello.s , 它依賴 hello.i
hello.i , 它依賴 hello.c

6.依賴方法

gcc hello.* -option hello.* ,就是與之對應的依賴關系

7.原理

make是如何工作的,在默認的方式下,也就是我們只輸入make命令。那么

1. make會在當前目錄下找名字叫“Makefile”或“makefile”的文件。
2. 如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“hello”這個文件,
并把這個文件作為最終的目標文件。
3. 如果hello文件不存在,或是hello所依賴的后面的hello.o文件的文件修改時間要比hello這個文件新(可
以用 touch 測試),那么,他就會執行后面所定義的命令來生成hello這個文件。
4. 如果hello所依賴的hello.o文件不存在,那么make會在當前文件中找目標為hello.o文件的依賴性,如果
找到則再根據那一個規則生成hello.o文件。(這有點像一個堆棧的過程)
5. 當然,你的C文件和H文件是存在的啦,于是make會生成 hello.o 文件,然后再用 hello.o 文件聲明
make的終極任務,也就是執行文件hello了。
6. 這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文
件。
7. 在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯,
而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。
8. make只管文件的依賴性,即,如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起,
我就不工作啦.

8.項目清理

工程是需要被清理的
像clean這種,沒有被第一個目標文件直接或間接關聯,那么它后面所定義的命令將不會被自動執行,
不過,我們可以顯示要make執行。即命令——“make clean”,以此來清除所有的目標文件,以便重編譯。
但是一般我們這種clean的目標文件,我們將它設置為偽目標,用 .PHONY 修飾,偽目標的特性是,總是被執行的

結尾:今天的分享到此結束,喜歡的朋友如果感覺有幫助可以點贊三連支持,咱們共同進步!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43975.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43975.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43975.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++的makeFile怎么做

makeFile30分鐘 1 介紹&#xff08;makeFile是什么&#xff0c;30分鐘入門搞懂&#xff09;2 為什么要用makeFile3 如何制作makeFile文件&#xff1f;4 參考 makeFile真的很簡單&#xff0c;不要想的一下子全都學懂了&#xff0c;先入門了&#xff0c;然后在實踐中去使用&#…

Apache部署與配置

概述 介紹 Apache HTTP Server(簡稱Apache)是Apache的一個開源的網頁服務器&#xff0c;它源自NCSAhttpd服務器&#xff0c;并經過多次修改和發展&#xff0c;如今已經成為全球范圍內廣泛使用的Web服務器軟件之一 特點 跨平臺&#xff1a;可以運行在幾乎所有廣泛使用的計算機平…

36 特殊類設計

類&#xff0c;不能被拷貝 拷貝只會放生在兩個場景中&#xff1a;拷貝構造函數以及賦值運算符重載&#xff0c;因此想要讓一個類禁止拷貝。 c98 將拷貝構造函數與賦值云懸浮重載只聲明不定義&#xff0c;并且將其訪問權限設置為私有 class CopyBan{// ...private:CopyBan(co…

Apache中使用SSI設置

先停服務在修改httpd.conf&#xff0c;備份下 Apache\Apache24\conf 設置httpd.conf LoadModule ssl_module modules/mod_ssl.so 取消該命令前的注釋符# AddType text/html .shtml AddOutputFilter INCLUDES .shtml 取消該命令前的注釋符# 加入html AddType text/html .…

在 Kotlin 中,`@JvmOverloads` 注解用于為具有默認參數值的函數生成重載方法

在 Kotlin 中&#xff0c;JvmOverloads 注解用于為具有默認參數值的函數生成重載方法。這個注解在你需要從 Java 代碼調用 Kotlin 函數時特別有用&#xff0c;因為 Java 不支持默認參數值。 下面是一個例子&#xff0c;說明 JvmOverloads 的工作原理&#xff1a; Kotlin 代碼…

前端javascript中的排序算法之插入排序

插入排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 插入排序每次排一個數組項&#xff0c;以此方式構建最后的排序數組。假定第一項已經排序了&#xff0c;接著&#xff0c; 它和第二項進行比較&#xff0c;第二項是應該待在原位還是插到第一項之前呢&#…

軟件工具網站推薦

1.菜鳥工具 菜鳥工具 - 不止于工具菜鳥工具&#xff0c;為開發設計人員提供在線工具&#xff0c;網址導航&#xff0c;提供在線PHP、Python、 CSS、JS 調試&#xff0c;中文簡繁體轉換&#xff0c;進制轉換等工具。致力于打造國內專業WEB開發工具&#xff0c;集成開發環境&…

詳細談談負載均衡的startupProbe探針、livenessProbe探針、readnessProbe探針如何使用以及使用差異化

文章目錄 startupProbe探針startupProbe說明示例配置參數解釋 使用場景說明實例——要求&#xff1a; 容器在8秒內完成啟動&#xff0c;否則殺死對應容器工作流程說明timeoutSeconds: 和 periodSeconds: 參數順序說明 livenessProbe探針livenessProbe說明示例配置參數解釋 使用…

CSS技巧專欄:一日一例 1.純CSS實現 會討好的熱情按鈕 特效

題外話: 從今天開始,我準備開設一個新的專欄,專門寫 使用CSS實現各種酷炫按鈕的方法,本專欄目前準備寫40篇左右,大概會完成如下按鈕效果: 今天,我來介紹第一個按鈕的實現方法:會討好的熱情按鈕。為什么我給它起這樣的名字呢?你看它像不像一個不停搖尾巴的小黃?當你鼠…

【QML之·基礎語法概述】

系列文章目錄 文章目錄 前言一、QML基礎語法二、屬性三、腳本四、核心元素類型4.1 元素可以分為視覺元素和非視覺元素。4.2 Item4.2.1 幾何屬性(Geometry&#xff09;:4.2.2 布局處理:4.2.3 鍵處理&#xff1a;4.2.4 變換4.2.5 視覺4.2.6 狀態定義 4.3 Rectangle4.3.1 顏色 4.4…

1Panel服務器面板支持哪些Linux操作系統?

1Panel面板支持的Linux操作系統版本有哪些&#xff1f;1Panel支持主流Linux發行版本&#xff0c;包括RedHat、CentOS、Ubuntu、Debian、openEuler及其他國產操作系統。支持多種服務器架構&#xff0c;碼筆記整理詳細1Panel面板支持的服務器系統、架構、內存和瀏覽器支持&#x…

【界面態】霍爾效應表征氮化對SiC/SiO2界面陷阱的影響

引言 引言主要介紹了硅碳化物&#xff08;SiC&#xff09;金屬-氧化物-半導體場效應晶體管&#xff08;MOSFETs&#xff09;作為新一代高壓、低損耗功率器件的商業化背景。SiC MOSFETs因其優越的電氣特性&#xff0c;在高電壓和高溫應用領域具有巨大的潛力。然而&#xff0c;盡…

綜合安全防護

題目 1,DMZ區內的服務器,辦公區僅能在辦公時間內(9:00-18:00)可以訪問,生產區的設備全天可以訪問. 2,生產區不允許訪問互聯網,辦公區和游客區允許訪問互聯網 3,辦公區設備10.0.2.10不允許訪問DMz區的FTP服務器和HTTP服務器,僅能ping通10.0.3.10 4,辦公區分為市場部和研發部,研…

Redis 數據過期及淘汰策略

Redis 數據過期及淘汰策略 過期策略 定時過期 在設置key?的過期時間的同時&#xff0c;為該key?創建一個定時器&#xff0c;讓定時器在key?的過期時間來臨時&#xff0c;對key進行刪除。到過期時間就會立即清除。該策略可以立即清除過期的數據&#xff0c;對內存很友好&a…

動態數據庫設計

動態數據庫設計是一種靈活的方法&#xff0c;用于構建能夠適應不斷變化的數據需求的數據庫結構。它強調在不頻繁修改數據庫表結構的前提下&#xff0c;有效管理和存儲多樣化的數據。以下是實現動態數據庫設計的一些關鍵技術點和策略&#xff1a; 實體-屬性-值&#xff08;EAV&a…

Rockchip RK3588 - Rockchip Linux SDK腳本分析

---------------------------------------------------------------------------------------------------------------------------- 開發板 &#xff1a;ArmSoM-Sige7開發板eMMC &#xff1a;64GBLPDDR4 &#xff1a;8GB 顯示屏 &#xff1a;15.6英寸HDMI接口顯示屏u-boot &a…

LeetCode //C - 214. Shortest Palindrome

214. Shortest Palindrome You are given a string s. You can convert s to a palindrome by adding characters in front of it. Return the shortest palindrome you can find by performing this transformation. Example 1: Input: s “aacecaaa” Output: “aaacec…

如何在JetBrains中寫Codeforce?

目錄 前言 正文 leetcode 個人喜好 參考資料 具體操作步驟 尾聲 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University of Nottingham Ningbo China&#x1f4…

Python函數 之 模塊和包

1.模塊 1, 在Python 中, 每個以 .py 結尾的 Python 代碼?件 都可以稱為是?個模塊。 2, 在模塊中 別?書寫好的功能(變量, 函數, 類)&#xff0c;我們可以拿來直接使?。 3, 我們自己寫的代碼文件&#xff0c; 想要作為模塊讓別?使?, 你的代碼?件名(模塊名) 滿足標識符的規…

物流工業三防平板實時跟蹤貨物位置和狀態

在當今全球化和高度數字化的商業環境中&#xff0c;物流行業的高效運作對于企業的成功和經濟的繁榮至關重要。貨物的準確、實時跟蹤不僅能提高物流效率&#xff0c;還能增強客戶滿意度&#xff0c;降低運營成本。物流工業三防平板的出現&#xff0c;為實現貨物位置和狀態的實時…