【C++】linux下的gdb程序調試

目錄

  • 【C++】Linux 下的 GDB 程序調試
    • 1. 安裝 GDB
    • 2. 編譯程序
    • 3. 啟動 GDB
    • 4. 設置斷點
    • 5. 執行程序
    • 6. 調試命令
    • 7. 調試崩潰
    • 8. 結束調試

【C++】Linux 下的 GDB 程序調試

在開發 C++ 程序時,出現 bug 是常見的。調試是找出程序錯誤的關鍵步驟之一。在 Linux 環境下,我們可以使用 GDB (GNU Debugger) 工具來幫助我們進行程序調試。本文將介紹如何在 Linux 下使用 GDB 進行 C++ 程序調試的基本步驟和常用命令。

1. 安裝 GDB

首先,我們需要在 Linux 系統上安裝 GDB。在大多數發行版的軟件倉庫中都可以找到 GDB。在 Ubuntu 上,可以使用以下命令進行安裝:

sudo apt-get install gdb

2. 編譯程序

在進行調試之前,我們需要先用調試符號編譯你的 C++ 程序。在編譯時,使用 -g 參數來生成調試符號信息。例如,假設你的程序文件名為 “program.cpp” ,可以使用以下命令進行編譯:

g++ -g program.cpp -o program

這里如果使用的是cmake:

cmake .. -DCMAKE_BUILD_TYPE=Debug

3. 啟動 GDB

通過在終端中輸入 gdb 命令即可啟動 GDB 調試器,并加載你的程序。例如,假設你的可執行文件名為 “program” ,可以在命令行中輸入:

gdb program

4. 設置斷點

斷點是 GDB 中調試過程中常用的工具之一。通過設置斷點,我們可以在程序執行到特定位置時停下來,以便查看程序狀態。在 GDB 命令提示符下,可以使用 breakb 命令來設置斷點。

  • 在特定行上設置斷點:

    break line_number
    

    例如,要在第 10 行設置斷點,可以輸入:

    break 10
    
  • 在特定函數中設置斷點:

    break function_name
    

    例如,要在名為 “myFunction” 的函數中設置斷點,可以輸入:

    break myFunction
    

5. 執行程序

調試器已經加載程序并設置好斷點,可以通過 runr 命令來執行程序。

run

執行后,程序將開始運行,直到遇到第一個斷點或程序結束。

6. 調試命令

在程序執行過程中,可以使用以下命令來進行調試:

  • nextn:單步執行程序,將執行到下一行,但不會進入函數。
  • steps:單步執行程序,將執行到下一行,并進入函數。
  • continuec:繼續執行程序,直到遇到下一個斷點或程序結束。
  • printp:打印變量的值。例如,p variable_name
  • backtracebt:顯示當前調用棧。
  • quitq:退出 GDB 調試器。

此外,還有其他許多 GDB 命令可用以幫助進行調試和查看程序的狀態,可以使用 help 命令獲取更多信息。

7. 調試崩潰

如果程序發生崩潰,GDB 可以幫助我們確定問題所在。當程序異常終止時,可以使用 backtrace 命令查看調用棧,并使用 print 命令查看相關變量的值,以了解導致崩潰的原因。如果可用,還可以使用 core 文件進行更深入的分析。

gdb program core

8. 結束調試

當調試完成后,可以使用 quit 命令退出 GDB 調試器。

以上是在 Linux 環境下使用 GDB 調試 C++ 程序的基本步驟和常用命令。掌握了這些基本技巧,可以更高效地診斷和修復程序中的錯誤。希望這篇博客對你在 C++ 程序調試方面有所幫助。

附:如使用vscode的界面化調試,其json為:

{// 使用 IntelliSense 了解相關屬性。 // 懸停以查看現有屬性的描述。// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb)start","type": "cppdbg","request": "launch","program": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/arcface_demo","args": [],"stopAtEntry": false,"cwd": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "為 gdb 啟用整齊打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "將反匯編風格設置為 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"miDebuggerPath": "/usr/bin/gdb"}]
}

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

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

相關文章

RedisTemplate使用詳解

RedisTemplate介紹StringRedisTemplate介紹RedisConnectionFactory介紹RedisConnectionFactory源碼解析 RedisOperations介紹RedisOperations源碼解析 RedisTemplate使用連接池配置RedisTemplate連接池連接池配置 RedisTemplate應用場景RedisTemplate主要特點RedisTemplate使用…

redis運維(十六) 有序集合

一 有序集合 把握一點: 各種redis 命令都提供各種語言對應的API 接口,后續API是關鍵 ① 概念 1、sorted set --> 有序集合2、redis有序集合也是集合類型的一部分,所以它保留了集合中元素不能重復的特性3、但是不同的是,有序集合給每個元素多設置…

什么是數字孿生?

數字孿生是指通過數字化技術手段,將現實世界中的實體物理系統或過程與其數字化模型相連接,實現實體物理系統或過程的虛擬仿真、監測、預測和優化等功能的一種技術。數字孿生技術可以將物理系統的運行狀態、性能參數、故障信息等實時反饋到數字模型中&…

轉型做視頻了,博客就是稿子,繼續堅持寫博客,同時發布視頻,能寫博客說明思路清晰了,能再講明白,理解就更透徹了,緊跟上時代發展。

1,今天特別記錄下,B站給開通了《合集》功能 最近使用視頻制作了幾個視頻。播放量還不錯,最好的已經到了 2.6K了。 然后粉絲也漲到了 200個。 添加鏈接描述 緊跟時代:從寫博客到錄視頻,粉絲大漲,突破200個&…

vue開發一、在Vue中引入ElementUI二、在Vue中使用阿里圖標庫

目錄 一、在Vue中引入ElementUI1. 安裝ElementUI2. 引入ElementUI3. 使用ElementUI組件 二、在Vue中使用阿里圖標庫1. 在阿里圖標庫中選擇圖標2. 下載圖標3. 引入圖標4. 使用圖標 總結 一、在Vue中引入ElementUI ElementUI是一種基于Vue的第三方UI庫,提供了許多常用…

接口自動化測試 —— 工具、請求與響應

一、工具: 1.工具介紹 postman :很主流的API測試工具,也是工作里面使用最廣泛的研發工具。 JMeter: ApiPost: 2.安裝postman: 安裝好直接打開,不用注冊。 二、通信模式: 1、…

【Java 進階篇】從Java對象到JSON:Jackson的魔法之旅

在現代的軟件開發中,處理數據的能力是至關重要的。而當我們談及數據格式時,JSON(JavaScript Object Notation)通常是首選。為了在Java中輕松地將對象轉換為JSON,我們需要一種強大而靈活的工具。這時,Jackso…

【Java 進階篇】Redis:打開緩存之門

介紹 Redis(Remote Dictionary Server)是一個高性能的鍵值對存儲系統,被廣泛用作緩存、消息中間件和數據庫。它以其快速的讀寫能力、支持多種數據結構和豐富的功能而聞名。在這篇博客中,我們將深入了解Redis的概念、安裝以及基本…

MQTT協議消息代理服務遠程連接

目錄 1. Linux 搭建 Mosquitto 2. Linux 安裝Cpolar 3. 創建MQTT服務公網連接地址 4. 客戶端遠程連接MQTT服務 5. 代碼調用MQTT服務 6. 固定連接TCP公網地址 7. 固定地址連接測試 Mosquitto是一個開源的消息代理,它實現了MQTT協議版本3.1和3.1.1。它可以在不…

第二十章:多線程

進程 線程的特點 1.進程是資源分配的最小單位&#xff0c;線程是最小的執行單位 2.一個進程可以有多個線程 3.線程共享進程資源 package twentyth; public class ThreadTest extends Thread { public void run() { for (int i 1; i < 10; i) {//繼承重…

Unity開發之C#基礎-File文件讀取

前言 今天我們將要講解到c#中 對于文件的讀寫是怎樣的 那么沒接觸過特別系統編程小伙伴們應該會有一個疑問 這跟文件有什么關系呢&#xff1f; 我們這樣來理解 首先 大家對電腦或多或少都應該有不少的了解吧 那么我們這些軟件 都是通過變成一個一個文件保存在電腦中 我們才可以…

【2023C卷最新題目】20天拿下華為OD筆試之【貪心】2023C-找座位/2023B-座位調整-全網注釋最詳細分類最全的華為OD真題題解

文章目錄 題目描述與示例題目描述輸入輸出說明示例一輸入輸出 示例二輸入輸出說明 解題思路代碼PythonJavaC時空復雜度 相同問題不同描述2023C-找座位題目描述輸入描述輸出描述示例一輸入輸出 示例二輸入輸出 華為OD算法/大廠面試高頻題算法練習沖刺訓練 題目描述與示例 題目描…

Spring Boot創建和使用(重要)

Spring的誕生是為了簡化Java程序開發的&#xff01; Spring Boot的誕生是為了簡化Spring程序開發的&#xff01; Spring Boot就是Spring框架的腳手架&#xff0c;為了快速開發Spring框架而誕生的&#xff01;&#xff01; Spring Boot的優點&#xff1a; 快速集成框架&#x…

2023年G2電站鍋爐司爐證考試題庫及G2電站鍋爐司爐試題解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2023年G2電站鍋爐司爐證考試題庫及G2電站鍋爐司爐試題解析是安全生產模擬考試一點通結合&#xff08;安監局&#xff09;特種作業人員操作證考試大綱和&#xff08;質檢局&#xff09;特種設備作業人員上崗證考試大綱…

MySQL 事務的底層原理和 MVCC(一)

在事務的實現機制上&#xff0c;MySQL 采用的是 WAL&#xff08;Write-ahead logging&#xff0c;預寫式日志&#xff09;機制來實現的。 在使用 WAL 的系統中&#xff0c;所有的修改都先被寫入到日志中&#xff0c;然后再被應用到系統中。通常包含 redo 和 undo 兩部分信息。 …

【Java開發】 Springboot集成Mybatis-Flex

1 Mybatis-Flex 介紹 1.1簡介 Mybatis-Flex 是一個優雅的 Mybatis 增強框架&#xff0c;它非常輕量、同時擁有極高的性能與靈活性。我們可以輕松的使用 Mybaits-Flex 鏈接任何數據庫&#xff0c;其內置的 QueryWrapper 亮點幫助我們極大的減少了 SQL 編寫的工作的同時&#xff…

cocos2dx ??Animate3D(二)

Twirl 扭曲旋轉特效 // 持續時間(時間過后不會回到原來的樣子) // 整個屏幕被分成幾行幾列 // 扭曲中心位置 // 扭曲的數量 // 振幅 static Twirl* create(float duration, const Size& gridSize, const Vec2& position, unsigned int twirls, float amplitude)…

編程語言發展史:C語言的誕生及其影響

預計更新 第一部分&#xff1a;早期編程語言 1.1布爾代數和機器語言 1.2匯編語言的出現和發展 1.3高級語言的興起 第二部分&#xff1a;主流編程語言 1.1 C語言的誕生及其影響 1.2 C語言的發展和應用 1.3 Java語言的出現和發展 1.4 Python語言的興起和特點 1.5 JavaScript語言…

基于springboot實現攝影跟拍預定管理系統【項目源碼+論文說明】計算機畢業設計

基于springboot實現攝影跟拍預定管理系統演示 摘要 首先,論文一開始便是清楚的論述了系統的研究內容。其次,剖析系統需求分析,弄明白“做什么”,分析包括業務分析和業務流程的分析以及用例分析,更進一步明確系統的需求。然后在明白了系統的需求基礎上需要進一步地設計系統,主要…

【2018年數據結構真題】

方法一 給定一個含n(n>1)個整數的數組&#xff0c;請設計一個在時間上盡可能高效的算法&#xff0c;找出數組中未出現的最小正整數。例如&#xff0c;數組{-5&#xff0c;3&#xff0c;2&#xff0c;3}中未出現的最小正整數是1&#xff1b;數組{1&#xff0c;2&#xff0c;…