Linux的調試器--gbd/cgbd

1.引入

#include <stdio.h>
int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;}return result;
}
int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}
程序的發布?式有兩種, debug 模式和 release 模式, Linux gcc/g++ 出來的?進制程
序,默認是 release 模式。這一點在我們window下比較直觀。
要使?gdb調試,必須在源代碼?成?進制程序的時候, 加上 -g 選項,如果沒有添加,程序?法被
編譯。
在創建好兩種格式后我們可以看到他們的內存是不一樣的。

2.gbd/cgbd的使用

一般情況下,我們更建議使用cgbd,因為cgbd會顯示源代碼
開始: gdb binFile
退出: ctrl + d quit 調試命令
命令作用樣例
list/l顯示源代碼,從上次位置開始,每次列出 10 行list/l 10
list/l 函數名列出指定函數的源代碼list/l main
list/l 文件名:行號列出指定文件的源代碼list/l mycmd.c:1
r/run從程序開始連續執行run
n/next單步執行,不進入函數內部next
s/step單步執行,進入函數內部step
break/b [文件名:] 行號在指定行號設置斷點break 10
break test.c:10
break/b 函數名在函數開頭設置斷點break main
info break/b查看當前所有斷點的信息info break
finish執行到當前函數返回,然后停止finish
print/p 表達式打印表達式的值print start+end
p 變量打印指定變量的值p x
set var 變量 = 值修改變量的值set var i=10
continue/c從當前位置開始連續執行程序continue
delete/d breakpoints刪除所有斷點delete breakpoints
delete/d breakpoints n刪除序號為 n 的斷點delete breakpoints 1/d 1
disable breakpoints禁用所有斷點disable breakpoints
enable breakpoints啟用所有斷點enable breakpoints
info/i breakpoints查看當前設置的斷點列表info breakpoints
display 變量名跟蹤顯示指定變量的值(每次停止時)display x
undisplay 編號取消對指定編號的變量的跟蹤顯示undisplay 1
until x 行號執行到指定行號until 20
backtrace/bt查看當前執行棧的各級函數調用及參數backtrace
info/i locals查看當前棧幀的局部變量值info locals
quit退出 GDB 調試器quit
對于一些常用的指令我們解釋一下:

(1)

r/run從程序開始連續執行run

細節1:gdb啟動調試的時候,只是開啟了gdb,被調試程序,并沒有運行起來。

細節2:r/run,表示的是在gdb的場景中,啟動我們自己的mycmd程序

細節3:在沒有斷點的情況下,r/run,就是 讓我們的程序直接運行結束

細節4:斷點的本質功能:讓我們的程序,在運行到指定的行,進行暫停!

(2)

n/next單步執行,不進入函數內部next
s/step單步執行,進入函數內部step

?這兩條指令就相當于vs里的F10和F11。

(3)

continue/c從當前位置開始連續執行程序continue

運行到結束或者下一個節點處

(4)

disable breakpoints禁用所有斷點disable breakpoints
enable breakpoints啟用所有斷點enable breakpoints

為什么不刪除?因為要保留調試痕跡

3.?調試技巧

3.1watch

執?時監視?個表達式(如變量)的值。如果監視的表達式在程序運?期間的值發?變化,GDB 會暫停程序的執?,并通知使?者。
如果你有?些變量不應該修改,但是你懷疑它修改導致了問題,你可以watch它,如果變
化了,就會通知你。
watch的查看和刪除類似于斷點,info查看,d刪除。

3.2set var確定問題原因

在我們的測試案例中,
更改?下標志位,假設我們想得到 +-result
#include <stdio.h>
int flag = 0; // 故意錯誤
//int flag = -1;
//int flag = 1;
int Sum(int s, int e)
{
int result = 0;
for(int i = s; i <= e; i++)
{
result += i;
}
return result*flag;
}
int main()
{
int start = 1;
int end = 100;
printf("I will begin\n");
int n = Sum(start, end);
printf("running done, result is: [%d-%d]=%d\n", start, end, n);
return 0;
}

運行出來結果為0,但在調試的時候用set?var?flag=1改變flag的話就是5050。

3.3條件斷點

使用方法:

b?行號?條件

eg.?b 9 if i == 30 # 9是?號,表?新增斷點的位置。

在原有的斷點基礎上:

condition?編號?條件

條件斷點添加常?兩種?式:1. 新增 2. 給已有斷點追加
? 注意兩者的語法有區別,不要寫錯了。
? 新增: b ?號/?件名:?號/函數名 if i == 30(條件)
? 給已有斷點追加:condition 2 i==30, 其中2是已有斷點編號,沒有if

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

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

相關文章

PPIO × AstrBot:多平臺接入聊天機器人,開啟高效協同 | 教程

在消息平臺接入專屬聊天機器人&#xff0c;能快速生成精準答案&#xff0c;與項目管理、CRM等系統集成后&#xff0c;機器人還能根據任務進展自動建群、推送進度提醒&#xff0c;并精準相關人員&#xff0c;實現信息的高效傳遞。 AstrBot 是一個多平臺聊天機器人及開發框架&…

HAProxy 可觀測性最佳實踐

HAProxy 簡介 HAProxy&#xff08;High Availability Proxy&#xff09;是一款廣泛使用的高性能負載均衡器&#xff0c;支持 TCP 和 HTTP 協議&#xff0c;提供高可用性、負載均衡和代理服務。它特別適用于負載較大的 Web 站點&#xff0c;能夠支持數以萬計的并發連接&#xf…

增強LangChain交互體驗:消息歷史(記憶)功能詳解

背景 在構建聊天機器人時,將對話狀態傳入和傳出鏈至關重要。 LangGraph 實現了內置的持久層,允許鏈狀態自動持久化在內存或外部后端(如 SQLite、Postgres 或 Redis)中。在本文我們將演示如何通過將任意 LangChain runnables 包裝在最小的 LangGraph 應用程序中來添加持久性…

EasyRTC音視頻實時通話助力微信小程序:打造低延遲、高可靠的VoIP端到端呼叫解決方案

一、方案概述? 在數字化通信浪潮下&#xff0c;端到端實時音視頻能力成為剛需。依托龐大用戶生態的微信小程序&#xff0c;是實現此類功能的優質載體。基于WebRTC的EasyRTC音視頻SDK&#xff0c;為小程序VoIP呼叫提供輕量化解決方案&#xff0c;通過技術優化實現低延遲通信&a…

WebVm:無需安裝,一款可以在瀏覽器運行的 Linux 來了

WebVM 是一款可以在瀏覽器中運行的Linux虛擬機。不是那種HTMLJavaScript模擬的UI&#xff0c;完全通過HTML5/WebAssembly技術實現客戶端運行。通過集成CheerpX虛擬化引擎&#xff0c;可直接在瀏覽器中運行未經修改的Debian系統。 Stars 數13054Forks 數2398 主要特點 完整 Lin…

CesiumInstancedMesh 實例

CesiumInstancedMesh 實例 import * as Cesium from cesium;// Three.js 風格的 InstancedMesh 類, https://threejs.org/docs/#api/en/objects/InstancedMesh export class CesiumInstancedMesh {/*** Creates an instance of InstancedMesh.** param {Cesium.Geometry} geom…

創建型模式之Abstract Factory(抽象工廠)

創建型模式之Abstract Factory&#xff08;抽象工廠&#xff09; 摘要&#xff1a; 本文介紹了抽象工廠模式&#xff08;Abstract Factory&#xff09;&#xff0c;它是一種創建型設計模式&#xff0c;提供了一種創建一系列相關對象的接口而無需指定具體類。文章通過手機工廠示…

多卡訓練核心技術詳解

多卡訓練核心技術詳解 多卡訓練 主要圍繞分布式環境初始化、模型并行化、數據分片和梯度同步展開。下面結合您的代碼,詳細解釋這些核心部分: 并行執行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式環境初始化 def init_distributed():init_process_…

OpenCV---minAreaRect

一、基本概念與用途 minAreaRect是OpenCV中用于計算點集的最小面積旋轉矩形的函數。在計算機視覺領域&#xff0c;它常被用于&#xff1a; 目標檢測中獲取傾斜對象的邊界框&#xff08;如傾斜的車牌、文本行、工業零件&#xff09;形狀分析與識別&#xff08;如確定物體的主方…

高端裝備制造企業如何選擇適配的項目管理系統提升項目執行效率?附選型案例

高端裝備制造項目通常涉及多專業協同、長周期交付和高風險管控&#xff0c;因此系統需具備全生命周期管理能力。例如&#xff0c;北京奧博思公司出品的 PowerProject 項目管理系統就是一款非常適合制造企業使用的項目管理軟件系統。 國內某大型半導體裝備制造企業與奧博思軟件達…

如何科學測量系統的最高QPS?

要準確測量系統的最高QPS&#xff08;Queries Per Second&#xff09;&#xff0c;既不能簡單依賴固定請求數&#xff08;如2萬次&#xff09;&#xff0c;也不能盲目壓到服務器崩潰。以下是專業的方法論和步驟&#xff1a; 1. 核心原則 目標&#xff1a;找到系統在穩定運行&a…

HTML5實現簡潔的端午節節日網站源碼

HTML5實現簡潔的端午節節日網站源碼 前言一、設計來源1.1 網站首頁界面1.2 端午由來界面1.3 節日活動界面1.4 傳統美食界面1.5 民俗文化界面1.6 登錄界面1.7 注冊界面 二、效果和源碼2.1 動態效果2.2 源代碼 結束語 HTML5實現簡潔的端午節節日網站源碼&#xff0c;酷炫的大氣簡…

使用 `\033` 方式設置終端字體顏色

通過 ANSI 轉義序列(以八進制 \033 開頭 ,十進制 27 ),我們可以在支持的終端中輕松實現這一功能。本文將詳細介紹如何使用 \033 設置字體顏色,并提供 C、C++ 和 Python 的示例代碼。 什么是 ANSI 轉義序列? ANSI 轉義序列是一組特殊的字符序列,用于控制終端的顯示屬性…

脫發因素機器學習數據分析

脫發因素機器學習數據分析 一、背景描述 隨著年齡增長&#xff0c;脫發成為影響外貌與健康的重要問題。 本數據集包含遺傳、荷爾蒙變化、醫療狀況、藥物治療、營養缺乏、心理壓力等12個可能導致脫發的因素&#xff0c; 旨在通過數據分析挖掘各因素與脫發的潛在關聯&#xf…

React 第四十八節 Router中 useMatch 的使用詳細介紹及案例分析

前言 useMatch 是 React Router 中的一個鉤子&#xff0c;用于判斷當前 URL 路徑是否與指定模式匹配&#xff0c;并返回匹配的詳細信息。 它常用于動態路由參數提取、條件渲染和導航高亮等場景。 一、useMatch 核心功能 路徑匹配檢測&#xff1a;判斷當前路徑是否符合指定模…

ubuntu mysql 8.0.42 基于二進制日志文件位置和GTID主從復制配置

目錄 1 操作系統信息 2 MySql數據庫版本 3 主機列表 4 MySQL服務器都安裝依賴 5 主庫服務器安裝mysql軟件步驟&#xff1a; 6 從服務器安裝mysql軟件步驟 7 基于二進制日志文件位置的主從復制配置 8 使用全局事務標識符進行主從復制(GTID) 9 部署過程遇到問題 1 操作系…

鴻蒙OSUniApp滑動鎖屏實戰:打造流暢優雅的移動端解鎖體驗#三方框架 #Uniapp

UniApp滑動鎖屏實戰&#xff1a;打造流暢優雅的移動端解鎖體驗 引言 移動應用的安全性和用戶體驗是開發中不可忽視的重要環節。滑動鎖屏作為一種直觀、安全且用戶友好的解鎖方式&#xff0c;在移動應用中得到廣泛應用。本文將深入探討如何使用UniApp框架實現一個功能完備、動…

專場回顧 | 重新定義交互,智能硬件的未來設計

自2022年起&#xff0c;中國智能硬件行業呈現出蓬勃發展的態勢&#xff0c;市場規模不斷擴大。一個多月前&#xff0c;“小智AI”在短視頻平臺的爆火將智能硬件帶向了大眾視野&#xff0c;也意味著智能硬件已不再僅僅停留在概念和技術層面&#xff0c;而是加速邁向實際落地應用…

zynq 級聯多個ssd方案設計(ECAM BUG修改)

本文講解采用zynq7045芯片如何實現200T容量高速存儲方案設計&#xff0c;對于大容量高速存儲卡&#xff0c;首先會想到采用pcie switch級聯方式&#xff0c;因為單張ssd的容量是有限制的&#xff08;目前常見的m.2接口容量為4TB&#xff0c;U.2接口容量為16TB&#xff09;&…

中國區域每月地下水水位柵格數據集(2005-2022)

時間分辨率&#xff1a;月空間分辨率&#xff1a;1km - 10km共享方式&#xff1a;開放獲取數據大小&#xff1a;8.52 GB數據時間范圍&#xff1a;2005-01-01 — 2022-12-01元數據更新時間&#xff1a;2024-09-09 數據集摘要 數據集“GWs_cn_1km”提供了2005年至2022年中國區域…