C++ Linux調試(無IDE)

跨平臺IDE編譯調試C++很方便,如QTCreate 、VSCode、Eclipse等,但是如果只能使用Shell控制臺呢,gdb調試的優勢就很明顯了,在沒有IDE的情況下,這個方式最有效。因為上手不是很難,特此整理

參考鏈接

目錄

    • 1、GDB調試
      • 1.1、gcc 編譯輸出可調試程序
      • 1.2 cmake編譯輸出可調試程序
      • 1.3gdb常用指令
      • 1.4gdb操作步驟
    • 2、core調試
    • 3、調試正在運行的程序

1、GDB調試

1.1、gcc 編譯輸出可調試程序

命令樣例

gcc -g -o Run_exe test.c

1.2 cmake編譯輸出可調試程序

在CMakeList.txt中增加如下字段即可

# 設置為調試模式
set(CMAKE_BUILD_TYPE "Debug")
# 配置調試信息
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")

1.3gdb常用指令

gdb調試主要記住這個表,再就是開始實戰操作

命令命令縮寫命令說明
set args設置主程序的外部參數
例如:./Run_exe argc1 argc2
breakb設置斷點,b 3 表示在第3行設置斷點,可以設置多個斷點;也可以b functionName ,對函數下斷點
info b 查看所有斷點信息
delete 1 標識取消第一個斷點,斷點號通過info b可以查詢得到
runr開始運行程序,程序運行到斷點位置會停下來,如果沒有遇到斷點,程序一直運行下去
nextn執行當前行語句,如果該語句為函數調用,不會進入函數內部執行
steps執行當前語句,如果該語句為函數調用,則進入函數執行其中的第一條語句。
注意了:如果函數是庫函數或者第三方提供的函數,用s也是進不去的,因為沒有源代碼,如果是你自定義的函數,只要有源碼就可以進去
printp顯示變量值,例如:p name 表示顯示變量name的值。
list輸入該命令,回車,可以查看10行源代碼,再不用輸入命令,直接回車,還可以繼續看十行源代碼
continuec繼續程序的運行,直到遇到下一個斷點
bt查看程序執行到當前位置的調用棧
set var name=value設置變量的值,假設程序有兩個變量:
int ii;調試的時候 set var ii=22 即,把ii的值設置為22
char name[50];調試的時候 set var name=“測試” 把name的值設置為“測試”,注意這里不是strcpy
quitq退出gdb環境

1.4gdb操作步驟

這里假設已經編譯出可調式的程序
1、gdb 調試JoinTieGCP_EXE
在這里插入圖片描述
2、在該程序511設置斷點(如上圖)
3、設置外部傳參命令
在這里插入圖片描述
4、r運行程序,n下一步(不進入),s下一步(進入),list查看源代碼,info b 查看斷點等等

2、core調試

core調試主要查看程序異常在哪一行運行掛掉,中文輸出“段錯誤”,英文輸出“core dump”

表現如下(對于其他錯誤應該不支持該方法)
在這里插入圖片描述

接下來操作步驟:

1、ulimit -a 查看系統參數;
在這里插入圖片描述

2、ulimit -c unlimit 把core文件的大小設置為無限制;
在這里插入圖片描述

3、運行程序,生成core文件;
在這里插入圖片描述

4、gdb 程序名 core文件名
在這里插入圖片描述

5、輸入命令“bt”,查看函數調用棧
在這里插入圖片描述

3、調試正在運行的程序

1、程序執行中
測試程序中寫一個for循環100次,每次循環等待1秒的測試程序。

2、查找進程ID,進入進程調試
查找進程ID
ps -ef|grep book1

gdb調試
gdb book1 -p 21495
在這里插入圖片描述
剩下的就跟gdb調試差不多了

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

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

相關文章

光伏項目開發合作模式

光伏項目開發合作模式多種多樣,根據應用場景的不同,主要分為戶用光伏項目合作模式和工商業光伏項目合作模式。本文將分別介紹這兩種模式的特點和常見形式,幫助大家更好地了解光伏項目開發的市場運作。 一、戶用光伏項目合作模式 1.用戶全款購…

筆記本電腦內存不夠

筆記本電腦內存不夠是眾多筆記本用戶面臨的常見問題,尤其是對于一些需要處理大型文件或者運行復雜軟件的用戶,這個問題可能會嚴重影響筆記本的使用體驗。那么,我們應該如何解決筆記本電腦內存不夠的問題呢?本文將從幾個方面進行詳…

2024年6月118篇代碼大模型論文最全整理

引言 本文整理了2024年6月全球各大高校與科研機構發布的118篇代碼大模型相關論文。根據論文內容,我們將其整理為基座模型與訓練數據、代碼微調、測試基準、代碼Agent、低資源語言處理、AI代碼安全與分析、人機交互、軟件工程下游任務應用(包括代碼生成、…

基于B/S架構+java語言+ 開發工具Idea,vscode醫院產科信息管理系統源碼 如何標準化對接技術及各個模塊

基于B/S架構java語言 開發工具Idea,vscode醫院產科信息管理系統源碼 如何標準化對接技術及各個模塊 醫院產科信息管理系統:標準化對接是一個涉及多個方面的復雜過程,旨在通過數字化手段提升產科管理的效率與質量,實現孕產婦全周期的健康管理…

獲取JWT的token生成時間和過期時間

我用的依賴包如下 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.2.0</version></dependency>token生成時間 Date issuedAt jwt.getIssuedAt(); // 將Date轉換為Instant Instant c…

【9-2:代碼規范】

算法級思想 代碼規范&#xff08;java&#xff09; 代碼規范&#xff08;java&#xff09; 方法參數必須一致&#xff0c;不要出現自動裝箱拆箱操作SimpleDateFormat是線程不安全的使用equals注意空指針異常日志 事務場景中如果出現異常被捕時注意回滾不要再finally中使用retu…

字節碼編程javassist之增加異常捕獲

寫在前面 本文看下如何增加try catch異常捕獲。 1&#xff1a;程序 需要增強的類&#xff1a; public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插樁類 package com.dahuyou.javassist.huohuo.aa;import …

音頻demo:使用faad2將AAC數據解碼出PCM數據

1、README 前言 本demo是使用的開源項目faad2將aac數據解碼成pcm數據。 a. 編譯使用 faad2的編譯&#xff1a;(faad2下載地址&#xff1a;https://sourceforge.net/projects/faac/files/faad2-src/faad2-2.8.0/) tar xzf faad2-2.8.8.tar.gz cd faad2-2.8.8/ ./configure …

【數據結構】單鏈表:數據結構中的舞者,穿梭于理論與實踐的舞池

歡迎來到白劉的領域 Miracle_86.-CSDN博客 系列專欄 數據結構與算法 先贊后看&#xff0c;已成習慣 創作不易&#xff0c;多多支持&#xff01; 一、鏈表的概念和結構 1.1 鏈表的概念 在上一篇文章中&#xff0c;我們了解了線性表(linear list)&#xff0c;并且學習了其…

Spring——IOC創建對象方式

可參考官網&#xff1a;https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.htmlhttps://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html 1. 使用無參構造創建對象&#xff0…

數據庫性能優化系統設計

設計一個數據庫性能優化系統&#xff0c;目標是監測、診斷并改善數據庫的運行效率&#xff0c;確保系統能夠高效穩定地處理大量數據請求。以下是一個概要設計&#xff0c;包括關鍵模塊、功能和實現思路&#xff1a; 1. 系統架構 分布式監控中心&#xff1a;采用分布式架構收集…

C++ STL 協程(Coroutines)

一:什么是協程(Coroutines): 協程是輕量級線程,可以暫停和恢復執行,協程擁有自己的暫停點狀態,協程暫停時,將當前狀態保存起來,在恢復執行時會恢復之前保存的狀態。 二:例子: #include <coroutine> #include <iostream>void doTheWork() {std::cout <…

PHP寶藏神器多功能投票系統源碼小程序

&#x1f389;發現寶藏神器&#xff01;一鍵解鎖“多功能投票小程序”的無限可能? &#x1f308; 開篇安利&#xff1a;告別繁瑣&#xff0c;擁抱高效&#xff01; Hey小伙伴們&#xff0c;是不是經常為組織活動、收集意見而頭疼不已&#xff1f;&#x1f92f; 今天就要給大…

【理解STL】

目錄 一、STL的概念1、STL的定義2、STL的組成 二、容器1、容器的定義及作用2、string類&#xff08;非容器&#xff09;3、vector容器4、set容器5、queue容器6、priority_queue容器7、stack容器8、deque容器9、map容器10、pair容器11、bitset容器12、map和set的區別13、vector和…

Node 中基于 Koa 框架的 Web 服務搭建實戰

前言 在《Node之Web服務 - 掘金 (juejin.cn)》一文中,我們使用 HTTP 模塊構建了后端接口,從而實現了后端服務的開發。可以對此進行進一步優化 http模塊代碼回顧 const http require("http");const server http.createServer((req, res) > {if (reqUrl.pathna…

Python前沿技術:機器學習與人工智能

Python前沿技術&#xff1a;機器學習與人工智能 一、引言 隨著科技的飛速發展&#xff0c;機器學習和人工智能&#xff08;AI&#xff09;已經成為了計算機科學領域的熱門話題。Python作為一門易學易用且功能強大的編程語言&#xff0c;已經成為了這兩個領域的首選語言之一。本…

【零基礎】學JS

喝下這碗雞湯 “知識就是力量。” - 弗朗西斯培根 1.三元運算符 目標:能利用三元運算符執行滿足條件的語句 使用場景:其實是比if雙分支更簡單的寫法&#xff0c;可以使用三元表達式 語法&#xff1a;條件 ? 滿足條件的執行代碼 : 不滿足條件執行的代碼 接下來用一個小案例來展…

C#實現求解函數導數和值

using MathNet.Symbolics; using System; using System.IO; using System.Text;private string ConvertToLatex(string mathExpression) {return mathExpression.Replace(" * ", "").Replace("*", ""); }// 將函數定義為字符串 string…

AI語言處理的雙刃劍:Tokens令牌化技術解析

生成式人工智能模型&#xff0c;如GPT-4o&#xff0c;采用基于Transformer架構的復雜處理方式&#xff0c;這與人類處理文本的方式存在明顯差異。這些模型依賴于一種稱為“令牌化”的過程&#xff0c;將文本分解為更小的片段&#xff0c;稱為“令牌”&#xff0c;以便更有效地處…

Kafka拋棄Zookeeper后如何啟動?

Kafaka如何下載 官網地址 目前Kafka最新的版本就是3.7.1 我們可以看到下面這兩個版本信息&#xff1f;什么意思呢&#xff1f; Scala 2.12 - kafka_2.12-3.7.1.tgz (asc, sha512)Scala 2.13 - kafka_2.13-3.7.1.tgz (asc, sha512) 我們應該知道&#xff0c;一個完整的Kafka實…