GDB 调试入门教程

news2025/3/14 4:10:43

GDB 调试入门教程

  • 1. `sample.cpp`
    • 1.1. Compile and Run
  • 2. GDB 调试
  • 3. GDB commands
  • References

GDB is a command line debugger. It is a good choice on Linux or WSL. On macOS, use LLDB instead.

1. sample.cpp

(base) yongqiang@yongqiang:~/workspace/yongqiang$ ls -l
total 4
-rwxr-xr-x 1 yongqiang yongqiang 365 Feb 16 22:52 sample.cpp
(base) yongqiang@yongqiang:~/workspace/yongqiang$
#include <iostream>
#include <vector>

double Sum(const std::vector<double> &data) {
	double total = 0;
	for (size_t i = 0; i < data.size(); ++i) {
		total += data[i];
	}

	return total;
}

int main() {
	std::vector<double> data;
	data.push_back(10);
	data.push_back(20);
	data.push_back(30);

	std::cout << "Sum(data) = " << Sum(data) << std::endl;

	return 0;
}

1.1. Compile and Run

(base) yongqiang@yongqiang:~/workspace/yongqiang$ uname -a
Linux yongqiang 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:21:55 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
(base) yongqiang@yongqiang:~/workspace/yongqiang$

Compile your program with the -g flag and start GDB in text user interface (TUI) mode.

(base) yongqiang@yongqiang:~/workspace/yongqiang$ ls -l
total 4
-rwxr-xr-x 1 yongqiang yongqiang 365 Feb 16 22:52 sample.cpp
(base) yongqiang@yongqiang:~/workspace/yongqiang$

(base) yongqiang@yongqiang:~/workspace/yongqiang$ g++ -g --std=c++17 sample.cpp -o sample
(base) yongqiang@yongqiang:~/workspace/yongqiang$ ls -l
total 144
-rwxr-xr-x 1 yongqiang yongqiang 142488 Feb 16 22:58 sample
-rwxr-xr-x 1 yongqiang yongqiang    365 Feb 16 22:52 sample.cpp
(base) yongqiang@yongqiang:~/workspace/yongqiang$

(base) yongqiang@yongqiang:~/workspace/yongqiang$ ./sample
Sum(data) = 60
(base) yongqiang@yongqiang:~/workspace/yongqiang$

2. GDB 调试

  • Run program with GDB: $ gdb sample

  • Set a breakpoint on main function: (gdb) break main or (gdb) b main

As breakpoing was set on main function, program will stop at main function and wait for gdb command.

  • Run program: (gdb) run or (gdb) r

  • Print value of total: (gdb) print total or (gdb) p total

(base) yongqiang@yongqiang:~/workspace/yongqiang$ gdb sample
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.2) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from sample...
(gdb) break main
Breakpoint 1 at 0x1314: file sample.cpp, line 13.
(gdb) run
Starting program: /home/yongqiang/workspace/yongqiang/sample

Breakpoint 1, main () at sample.cpp:13
13      int main() {
(gdb) list
8               }
9
10              return total;
11      }
12
13      int main() {
14              std::vector<double> data;
15              data.push_back(10);
16              data.push_back(20);
17              data.push_back(30);
(gdb) next
14              std::vector<double> data;
(gdb) next
15              data.push_back(10);
(gdb) next
16              data.push_back(20);
(gdb) next
17              data.push_back(30);
(gdb) break Sum
Breakpoint 2 at 0x5555555552a9: file sample.cpp, line 4.
(gdb) next
19              std::cout << "Sum(data) = " << Sum(data) << std::endl;
(gdb) next

Breakpoint 2, Sum (data=std::vector of length -840921094004155616, capacity -196785920380801129 = {...}) at sample.cpp:4
4       double Sum(const std::vector<double> &data) {
(gdb) next
5               double total = 0;
(gdb) print total
$1 = 6.9533558072559594e-310
(gdb) next
6               for (size_t i = 0; i < data.size(); ++i) {
(gdb) next
7                       total += data[i];
(gdb) next
6               for (size_t i = 0; i < data.size(); ++i) {
(gdb) next
7                       total += data[i];
(gdb) next
6               for (size_t i = 0; i < data.size(); ++i) {
(gdb) next
7                       total += data[i];
(gdb) next
6               for (size_t i = 0; i < data.size(); ++i) {
(gdb) next
10              return total;
(gdb) print total
$2 = 60
(gdb) next
11      }
(gdb) next
Sum(data) = 60
main () at sample.cpp:21
21              return 0;
(gdb) clear
No breakpoint at this line.
(gdb) quit
A debugging session is active.

        Inferior 1 [process 26162] will be killed.

Quit anyway? (y or n) y
(base) yongqiang@yongqiang:~/workspace/yongqiang$

3. GDB commands

CommandDescription
run or rExecutes the program from start to end
break or bSets a breakpoint on a particular line
disableDisables a breakpoint
enableEnables a disabled breakpoint
next or nExecutes the next line of code without diving into functions; Step over functions
stepGoes to the next instruction, diving into the function; Step into functions
list or lDisplays the code
print or pDisplays the value of a variable
quit or qExits out of GDB
clearClears all breakpoints
continue or cContinue execution until the next breakpoint

References

[1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/
[2] GDB Tutorial, https://www.gdbtutorial.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32的HAL库开发---ADC

一、ADC简介 1、ADC&#xff0c;全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 把一些传感器的物理量转换成电压&#xff0c;使用ADC采集电压&#xff0c;然后转换成数字量&#xff0c;经过单片机处理&#xff0c;进行控制和显示。 2、常见的AD…

6.编写正排索引切分字符串|倒排索引原理|引入jieba到项目(C++)

编写正排索引 继续编写incde.hpp #pragma once#include <iostream> #include <string> #include <vector> #include <fstream> #include <unordered_map> #include "util.hpp"namespace ns_index{struct DocInfo{std::string title;…

在Windows系统上测试safari浏览器的兼容性

文章目录 前言手机端的safari浏览器能替代PC端吗在Windows上测试safari浏览器的兼容性的方法利用云服务使用虚拟机在Windows上下载虚拟机遇到的问题以及解决思路总结 前言 在测试网站的兼容性时需要用到safari浏览器&#xff0c;在没有Mac的情况下&#xff0c;又不想麻烦同事&…

【设计模式】【结构型模式】桥接模式(Bridge)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

惠普HP Color LaserJet CP1215/1210彩色打印机打印校准方法

执行校准 &#xff08;用随机光盘安装驱动&#xff09;完整安装打印机驱动程序。安装驱动程序的操作方法请参考以下文章&#xff1a; 惠普HP Color laserjet cp1215激光打印机在windows 7下使用随机光盘安装驱动程序&#xff0c;安装完成后&#xff1b; 依次点击“开始”→“所…

【雅思博客02】Virus!

Elementary ‐ Virus! (C0007) A: Oh great! This stupid computer froze again! That’s the third time today! Hey Samuel, can you come take a look at my PC? It’s acting up again. It must have a virus or something. B: Just give me a second; I’ll be right …

模型GPU->NPU(Ascend)迁移训练简述

目录 一、迁移训练流程图解 二、详细流程步骤 1. 模型训练与日志记录 2. 跨平台精度对齐对比 3. 问题定位与修复 4. 迭代验证 三、关键技术点 四、常见问题与解决方案 一、迁移训练流程图解 通过华为云的modelart进行运行环境选型 北京四使用GPU进行模型训练&#xff…

sql语言语法的学习

sql通用语法 sql分类 DDL(操作数据库和表) 操作数据库 操作表_查询 操作表_创建 举例&#xff1a; 操作表_删除 操作表_修改 DML(增删改表中数据) DML添加数据 DML删除数据

3.buuctf [BSidesCF 2019]Kookie

进入题目页面如下 尝试弱口令密码登录&#xff0c;无果 显示无效密码 用题中给出的用户名和密码登录虽然成功但没得到flag 用burp suite抓包试试 看到username处显示cookie 题目说用admin登录 将username的值改为admin 拿到flag 最后拿到flag

springboot245-springboot项目评审系统(源码+论文+PPT+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

Dify+Ollama+DeepSeek部署本地大模型+知识库搭建

前言 上一篇文章《OllamaDeepSeek部署本地大模型》我们已经知道如何在本地搭建自己的大模型了&#xff0c;不过想要让大模型能够根据我们个人或者企业的数据情况做出精准的回答&#xff0c;我们还需要将自己的数据投喂给大模型才可以。本篇文章我们将会使用一个开源项目dify集…

每日一题——不同路径的数目与矩阵最小路径和

机器人路径问题与矩阵最小路径和 1. 机器人路径问题题目描述示例示例 1示例 2 解题思路动态规划 代码实现复杂度分析 2. 矩阵的最小路径和题目描述示例示例 1示例 2 解题思路动态规划 代码实现复杂度分析 总结 1. 机器人路径问题 题目描述 一个机器人在 (m \times n) 大小的地…

143,【3】 buuctf web [GYCTF2020]EasyThinking

进入靶场 一开始那个题目名字就想到了框架 扫描目录 访问后自动下载了 找源码 <?php namespace app\home\controller;use think\exception\ValidateException; use think\facade\Db; use think\facade\View; use app\common\model\User; use think\facade\Request; use …

腾讯混元hunyuan3d生成模型,本地搭建和使用

腾讯混元hunyuan3d生成模型,本地搭建和使用 腾讯混元hunyuan3d生成模型,本地搭建和使用一. 话不多说,我们直接上本地部署的详细步骤1. 将仓库拉到本地2. 下载2个模型, 注意这里推荐 先使用conda创建环境后在安装modelscope进行下载模型2.1 关于第一个模型我们要在 Hunyuan3D-1 …

flutter image_cropper插件安装后 打包apk 报错命名空间问题

本篇文章主要讲解&#xff0c;Flutter安装完新依赖打包apk报错 A problem occurred configuring project ‘:image_cropper’. 命名空间问题的解决办法及原因说明。 日期&#xff1a;2025年2月15日 作者&#xff1a;任聪聪 一、报错现象&#xff1a; 报文信息&#xff1a; FAI…

2025-2-15-4.5 链表(基础题)

文章目录 4.6 链表&#xff08;基础题&#xff09;206. 反转链表92. 反转链表II24. 两两交换链表中的节点 4.6 链表&#xff08;基础题&#xff09; 有一天我做题忽然发现要把一个数组完全倒着翻过来很费劲&#xff0c;今天看&#xff0c;链表为此而生啊。 206. 反转链表 题目…

免费大模型网站

腾讯元宝 腾讯元宝 秘塔搜索 秘塔搜索 超算互联网 超算互联网回答速度很慢 Chatbot Arena Chatbot Arena 大模型竞技场。

macOS部署DeepSeek-r1

好奇&#xff0c;跟着网友们的操作试了一下 网上方案很多&#xff0c;主要参考的是这篇 DeepSeek 接入 PyCharm&#xff0c;轻松助力编程_pycharm deepseek-CSDN博客 方案是&#xff1a;PyCharm CodeGPT插件 DeepSeek-r1:1.5b 假设已经安装好了PyCharm PyCharm: the Pyth…

java八股文-mysql

1. 索引 1.1 什么是索引 索引(index)是帮助Mysql高效获取数据的数据结构(有序).提高数据的检索效率,降低数据库的IO成本(不需要全表扫描).通过索引列对数据进行排序,降低数据排序成本,降低了CPU的消耗. 1.2 mysql索引使用的B树? 1. 没有使用二叉树&#xff0c;最坏情况o&…

YOLO11环境搭建CUDA12.6

1.安装CUDA和cuDNN 1.1安装CUDA 1.1.1查看当前你的电脑显卡支持的最高CUDA版本,后面的安装不能超过它 通过命令的方式查看 输入nvidia-smi 1.1.2 下载CUDA 官网地址:CUDA Toolkit Archive | NVIDIA Developer 选择cuda_12.6.3 下载完成后,如下: 安装,一直下一步即可:…