Linux調試器-gdb使用與馮諾依曼體系結構

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

前言

Linux調試器-gdb使用

1. 背景

2. 開始使用

馮諾依曼體系結構

總結


前言

世上有兩種耀眼的光芒,一種是正在升起的太陽,一種是正在努力學習編程的你!一個愛學編程的人。各位看官,我衷心的希望這篇博客能對你們有所幫助,同時也希望各位看官能對我的文章給與點評,希望我們能夠攜手共同促進進步,在編程的道路上越走越遠!


提示:以下是本篇文章正文內容,下面案例可供參考

Linux調試器-gdb使用

1. 背景

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

debug版本可調試,那是因為編譯器形成可執行程序的時候,會給可執行程序添加添加調試信息;而release版本不能調試。

2. 開始使用

gdb binFile(文件)? ?退出:ctrl + d 或 quit? ?

調試命令:

  • list/l (list簡寫) + 行號:顯示binFile源代碼,接著上次的位置往下列,每次顯示10行(一般是從這一行的上下文的代碼開始顯示);如果向繼續顯示下面的代碼,可以按回車,每次顯示10行。
  • list / l + 函數名 :?行號:默認從函數名的第幾行號開始,默認顯示10行。
  • list / l + 文件名 :?行號:默認從文件的第幾行開始,默認顯示10行。
  • r或run:(或重新)運行程序。(相當于F5,要和斷點一塊使用)
  • break(b)? + (文件名) + 行號:在(文件的)某一行設置斷點。
  • break + (文件名) :函數名:在某個函數開頭設置斷點。
  • info / (簡寫i)?break(簡寫b) :查看打的斷點的信息。
  • delete / (d) breakpoints?n(序號為n的斷點):刪除序號為n的斷點。
  • disable?breakpoints(n:序號為n的斷點):禁用斷點。(序號為n的斷點不想用,但是又不想刪除掉)
  • enable?breakpoints(n:序號為n的斷點):啟用斷點。
  • n 或 next:單條執行。(逐過程)
  • s或step:進入函數調用。(逐語句)
  • p(print) + 變量名/取地址變量名:打印變量值。(可以在查看循環中的值)
  • display + 變量名/取地址變量名:跟蹤查看一個變量,每次停下來都顯示它的值。(常顯示)
  • undisplay + 變量前面的編號:取消對先前設置的那些變量的跟蹤。
  • 斷點的本質:是幫我們縮小出問題的范圍。
  • continue(或c):從當前位置開始連續而非單步執行程序。(從當前斷點直接執行到下一個斷點處。)
  • finish:執行到當前函數返回(也就是結束),然后挺下來等待命令。
  • until + X行號:跳轉至指定行,中間的代碼都是運行了的。比如:在循環的函數里面。
  • set?var + 變量=你想要改成的值:修改變量的值。
  • delete?breakpoints:刪除所有斷點。
  • info(i)?locals:查看當前棧幀局部變量的值。
  • quit:退出gdb。
  • breaktrace(或bt):查看各級函數調用及參數。

馮諾依曼體系結構

我們常見的計算機,如筆記本。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系。

截至目前,我們所認識的計算機,都是有一個個的硬件組件組成

  • 輸入單元:包括鍵盤, 鼠標,掃描儀, 寫板等
  • 中央處理器(CPU):含有運算器和控制器等
  • 輸出單元:顯示器,打印機等

關于馮諾依曼,必須強調幾點:

  • 這里的存儲器指的是內存
  • 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)
  • 外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。
  • 一句話,所有設備都只能直接和內存打交道。

為什么要加儲存器呢?

假如我們的輸入設備和輸出設備直接和CPU連接起來,會怎么樣呢?數據從一個設備流到另一個設備,本質是拷貝過去的,而輸入設備和輸出設備的效率是非常低的,CPU的拷貝效率是非常高的,兩者之間的效率差是非常大的。(想一想木桶效應,木桶存儲水的多少,取決于最低的竹板,兩者是一樣的道理)

這時候加上存儲器的話,讓輸入設備給存儲器拷貝數據,存儲器給CPU拷貝數據,CPU對數據緊進行處理后,返回給存儲器,然后存儲器將數據拷貝到輸出設備上。以前CPU是直接在外設上拷貝數據,現在變成了CPU直接從存儲器上拷貝數據(這兩的拷貝效率會更快),而外設的拷貝只用作用到存儲器就可以了。而存儲器一次性可以存儲大量的數據,大大提高了運行的效率。存儲器比寄存器的內存容量更大,價格更低,性價比更高,適合廣大民眾。

結論:

在硬件數據流動角度,在數據層面:

1、CPU不和外設直接打交道,CPU只和內存打交道;

2、外設(輸入和輸出設備)的數據,不是直接給CPU的,而是要先放入到內存中。

程序運行,為什么要加載到內存?(馮諾依曼體系規定這么做的!!!)

程序=代碼+數據:程序的“代碼和數據”都要被CPU訪問;CPU只會從內存中讀取代碼和數據

程序還沒有加載到內存中的時候,在哪里?

在磁盤(外部設備),當前是二進制文件。

登錄上QQ,就代表著QQ的 .exe 的可執行程序被加載到內存當中了。

我們發的信息“你好!”,在輸入設備上會直接拷貝到內存中 ------> 存儲器將數據拷貝到CPU ----> CPU對數據進行加密運算 -----> 再返回到存儲器中 ------> 拷貝到輸出設備(網卡) ------> 通過網絡傳到你朋友的輸入設備(網卡) -----> 拷貝到內存的可執行程序中 ------> 拷貝到CPU來進行解密運算 -------> 再拷貝到內存當中 -----> 拷貝到輸出設備(顯示器)上。


總結

好了,本篇博客到這里就結束了,如果有更好的觀點,請及時留言,我會認真觀看并學習。
不積硅步,無以至千里;不積小流,無以成江海。

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

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

相關文章

計算機網絡-網絡互連和互聯網(五)

1.路由器技術NAT: 網絡地址翻譯,解決IP短缺,路由器內部和外部地址進行轉換。靜態地址轉換:靜態NAT(一對一) 靜態NAT,內外一對一轉換,用于web服務器,ftp服務器等固定IP的…

(定時器/計數器)中斷系統(詳解與使用)

講解 簡介 定時器/計數器 定時器實際上也是計數器,只是計數的是固定周期的脈沖 定時和計數只是觸發來源不同(時鐘信號和外部脈沖)其他方面是一樣的。 定時器在單片機內部就像一個小鬧鐘一樣,根據時鐘的輸出信號,每隔“一秒”,計數單元的數值就增加一,當計數單元數值…

C++:String類的使用

創作不易,感謝三連!! 在C語言中,我們想要存儲字符串的話必須要用字符數組 char str[]"hello world"這其實是將在常量區的常量字符串拷貝到數組中,我們會在數組的結尾多開一個空間存儲\0,這樣我…

前端構建之CERT_HAS_EXPIRED和certificate has expired解決方案

問題 2024年 1 月 22 日,淘寶原鏡像域名(registry.npm.taobao.org)的 HTTPS 證書正式到期。如果想要繼續使用,需要將 npm 源切換到新的源(registry.npmmirror.com),否則會報錯。 報錯信息為&a…

Consul服務注冊與發現 Consul配置步驟

Consul服務注冊與發現 Consul配置步驟 consul下載地址 Install | Consul | HashiCorp Developer 啟動需要在 下載好的文件夾里 用cmd 運行consul agent -dev啟動consul Consul配置 配置pom <!--SpringCloud consul config--> <dependency><groupId>org…

【leetcode】回文子串 動態規劃

/*** param {string} s* return {number}*/ var countSubstrings function(s) {let dpnew Array(s.length).fill().map(()>new Array(s.length).fill(false));let num0;for(let i0;i<s.length;i){for(let j0;j<i;j){//在首尾相等時&#xff0c;如果長度時1或者2&…

C++筆記(三)--- 函數重載

目錄 子類繼承父類重載 類成員函數重載 繼承和組合的三種方式請看我上一篇文章 C筆記&#xff08;二&#xff09;--- 繼承和組合-CSDN博客 子類繼承父類重載 當子類繼承父類之后&#xff0c;子類重新定義了一個和父類完全相同函數名稱的函數時&#xff0c;會將父類所有相同…

Pegasus智能家居套件樣例開發--軟定時器

樣例簡介 此樣例將演示如何在Pegasus Wi-Fi IoT智能家居套件上使用cmsis 2.0 接口進行定時器開發。 工程版本 系統版本/API版本&#xff1a;OpenHarmony 3.0 releaseIDE版本&#xff1a;DevEco Device Tool Release 3.0.0.401 快速上手 準備硬件環境 預裝windows系統的PC…

『大模型筆記』RAG應用的12種調優策略指南

RAG應用的12種調優策略指南 文章目錄 一. 概要二. 數據索引2.1. 數據清洗2.2. 分塊2.3. 嵌入模型2.4. 元數據(或未向量化的數據)2.5. 多索引2.6. 索引算法三. 推理階段(檢索和生成)3.1. 檢索參數3.2. 高級檢索策略3.3. 重新排序模型3.5. 大語言模型(LLM)

26、Qt調用.py文件中的函數

一、開發環境 Qt5.12.0 Python3.7.8 64bit 二、使用 新建一個Qt項目&#xff0c;右擊項目名稱&#xff0c;選擇“添加庫” 選擇“外部庫”&#xff0c;點擊“下一步” 點擊“瀏覽”&#xff0c;選擇Python安裝目錄下的libs文件夾中的“python37.lib”文件&#xff0c;點擊“下…

退休開便利店真的靠譜嗎?2024比較賺錢的創業項目排行

近日多個退休后開便利店賺錢的新聞登上熱搜&#xff0c;但是&#xff0c;小編對此有疑問&#xff0c;退休的老年人開便利店真的是一個好選擇嗎&#xff1f; 第一、便利店最基本的轉讓費&#xff0c;裝修費&#xff0c;進貨等等&#xff0c;這筆開支非常大&#xff0c;足以掏空老…

H5下拉刷新分頁

對于分頁需求&#xff0c;分頁數據的請求觸發十分重要&#xff0c;監聽滑動到底的觸發也有很多種。 1.IntersectionObserver監聽 IntersectionObserver 接口&#xff08;從屬于 Intersection Observer API&#xff09;提供了一種異步觀察目標元素與其祖先元素或頂級文檔視口&a…

終結數據混亂!開發者必學的GraphQL秘籍,高效API只需一步

在數字世界中&#xff0c;API就如同城市中的道路&#xff0c;連接著各種服務和數據。然而&#xff0c;傳統的API&#xff08;如RESTful&#xff09;雖然功不可沒&#xff0c;但隨著技術復雜性和需求多樣性不斷攀升&#xff0c;它們顯露出的局限性也呼喚著新的可能出現。此時&am…

Unity中,activeInHierarchy 和 activeSelf

activeInHierarchy&#xff1a; activeInHierarchy 屬性表示游戲對象是否在場景中處于激活狀態&#xff0c;并且是否在層次結構中的激活狀態。它考慮了游戲對象以及其所有父對象的激活狀態。如果 activeInHierarchy 為 true&#xff0c;表示該對象在場景中處于激活狀態且其所有…

LaMa Image Inpainting 圖像修復 Onnx Demo

目錄 介紹 效果 模型信息 項目 代碼 下載 LaMa Image Inpainting 圖像修復 Onnx Demo 介紹 gihub地址&#xff1a;https://github.com/advimman/lama &#x1f999; LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WAC…

《PyTorch深度學習實踐》第十三講RNN進階

一、 雙向循環神經網絡&#xff08;Bidirectional Recurrent Neural Network&#xff0c;BiRNN&#xff09;是一種常見的循環神經網絡結構。與傳統的循環神經網絡只考慮歷史時刻的信息不同&#xff0c;雙向循環神經網絡不僅考慮歷史時刻的信息&#xff0c;還考慮未來時刻的信息…

wireshark過濾和tcpdump抓包指令

Wireshark 過濾器的表達式&#xff0c;用于過濾源 IP 地址為 10.184.148.247 并且目標 TCP 端口為 1883 的數據包。啟用抓包后過濾 ip.addr 10.184.148.247 && tcp.port 1883 主機位10.184.148.19和目標端口為 8080 的操作目標 抓包前過濾 host 10.184.148.19 &…

軟件說明書怎么寫?終于有人一次性說清楚了!

每次寫軟件說明書&#xff0c;你是不是總是毫無頭緒&#xff0c;不知道從何下手&#xff1f;到各網站找資料&#xff0c;不僅格式不規范&#xff0c;甚至可能遺漏關鍵內容&#xff01;挨一頓批不說&#xff0c;還浪費大把時間。別著急&#xff0c;編寫軟件說明書&#xff0c;關…

PostgreSQL開發與實戰(2)常用命令

作者&#xff1a;太陽 1、連庫相關 #連庫 $ psql -h <hostname or ip> -p <端口> [數據庫名稱] [用戶名稱] #連庫并執行命令 $ psql -h <hostname or ip> -p <端口> -d [數據庫名稱] -U <用戶名> -c "運行一個命令;"備注&#xff1…

從理論到落地,大模型評測體系綜合指南

1956年夏&#xff0c;“人工智能” 這一概念被提出。距今已有近70年的發展歷史。中國科學院將其劃分為六個階段&#xff1a;起步發展期&#xff08;1956年—1960s&#xff09;&#xff0c;反思發展期&#xff08;1960s-1970s&#xff09;,應用發展期&#xff08;1970s-1980s),低…