当前位置: 首页 > news >正文

gdb调试常用命令

基本命令

1)进入GDB  #gdb test

  test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。

2)查看源码  (gdb) l

  源码会进行行号提示。

  如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。或者:使用断点或单步运行,到某个函数处使用s进入这个函数。

3)设置断点  (gdb) b 6

  这样会在运行到源码第6行时停止,可以查看变量的值、堆栈情况等;这个行号是gdb的行号。

 4)查看断点处情况  (gdb) info b

  可以键入"info b"来查看断点处情况,可以设置多个断点;

5)运行代码  (gdb) r

6)显示变量值  (gdb) p n

  在程序暂停时,键入"p 变量名"(print)即可;

  GDB在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;

7)观察变量  (gdb) watch n

 在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;

8)单步运行  (gdb) n

9)程序继续运行  (gdb) c

  使程序继续往下运行,直到再次遇到断点或程序结束;

10)退出GDB  (gdb) q


(gdb) break (b)    在源代码指定的某一行设置断点,其中xxx用于指定具体打断点位置
(gdb) run (r)    执行被调试的程序,其会自动在第一个断点处暂停执行。
(gdb) continue (c)    当程序在某一断点处停止后,用该指令可以继续执行,直至遇到断点或者程序结束。
(gdb) next (n)    令程序一行代码一行代码的执行。
(gdb) step(s)    如果有调用函数,进入调用的函数内部;否则,和 next 命令的功能一样。
(gdb) until (u)
(gdb) until (u) location    当你厌倦了在一个循环体内单步跟踪时,单纯使用 until 命令,可以运行            程序直到退出循环体。
        until n 命令中,n 为某一行代码的行号,该命令会使程序运行至第 n 行代码处停止。
(gdb) print (p)    打印指定变量的值,其中 xxx 指的就是某一变量名。
(gdb) list (l)    显示源程序代码的内容,包括各行代码所在的行号。
(gdb) finish(fi)    结束当前正在执行的函数,并在跳出函数后暂停程序的执行。
(gdb) return(return)    结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。
(gdb) jump(j)    使程序从当前要执行的代码处,直接跳转到指定位置处继续执行后续的代码。
(gdb) quit (q)    终止调试。

代码举例如下:

$ ls
main.cpp
$ g++ -g -o test main.cpp
$ ls
main.cpp  test
$ gdb test         <-- 启动gdb进行调试
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-94.el7
Copyright (C) 2013 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-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/zhuyong/project/linux/blog/gdb/test...done.
(gdb)
$ gdb test -q      <-- 启动gdb进行调试
Reading symbols from /home/zhudi/project/linux/blog/gdb/test...done.
(gdb) l            <-- 显示带行号的源代码
1	#include <iostream>
2	using namespace std;
3
4	int main() {
5	    int sum = 0;
6	    int n = 1;
7	    while (n <= 100) {
8	        sum += n;
9	        n++;
10	    }
(gdb)              <-- 默认情况下,l 选项只显示 10 行源代码,如果查看后续代码,按 Enter 回车键即可
11	    cout << "sum = " << sum << endl;
12
13	    return 0;
14	}
15
(gdb) b 7          <-- 在第7行源代码处打断点
Breakpoint 1 at 0x4008d3: file main.cpp, line 7.
(gdb) r            <-- 运行程序,遇到断点停止
Starting program: /home/zhudi/project/linux/blog/gdb/testBreakpoint 1, main () at main.cpp:7
7	    while (n <= 100) {
Missing separate debuginfos, use: debuginfo-install glibc-2.17-307.el7.1.x86_64 libgcc-4.8.5-39.el7.x86_64 libstdc++-4.8.5-39.el7.x86_64
(gdb) print n      <-- 查看代码中变量 n 的值
$1 = 1             <-- 当前 n 的值为 1,$1 表示该变量 表示该变量所在存储区的名称
(gdb) b 13
Breakpoint 2 at 0x40090e: file main.cpp, line 13.
(gdb) n            <-- 单步执行程序
8	        sum += n;
(gdb) n            <-- 单步执行程序
9	        n++;
(gdb) c            <-- 继续执行程序
Continuing.
sum = 5050Breakpoint 2, main () at main.cpp:13
13	    return 0;
(gdb) print sum     <-- 查看 sum 的值    
$2 = 5050           <-- 当前 sum 的值为 5050
(gdb) q             <-- 退出调试
A debugging session is active.Inferior 1 [process 8449] will be killed.Quit anyway? (y or n) y     <-- 确认是否退出调试,y 为退出,n 为不退出

相关文章:

gdb调试常用命令

基本命令 1&#xff09;进入GDB  #gdb test test是要调试的程序&#xff0c;由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 2&#xff09;查看源码  (gdb) l 源码会进行行号提示。 如果需要查看在其他文件中定义的函数&#xff0c;在l后加上函数名即可定位到这…...

CH11_重构API

将查询函数和修改函数分离&#xff08;Separate Query from Modifier&#xff09; function getTotalOutstandingAndSendBill() {const result customer.invoices.reduce((total, each) > each.amount total, 0);sendBill();return result; }function totalOutstanding() …...

UPLOAD-LABS1

less1 (js验证) 我们上传PHP的发现不可以&#xff0c;只能是jpg&#xff0c;png&#xff0c;gif&#xff08;白名单限制了&#xff09; 我们可以直接去修改限制 在查看器中看到使用了onsubmit这个函数&#xff0c;触发了鼠标的单击事件&#xff0c;在表单提交后马上调用了re…...

WordPress相关文章推荐

首先 WordPress 本身并没有相关文章的推荐功能&#xff0c;网站之所以需要这样的功能出于两个原因&#xff0c;一方面是推荐相关的内容越优质&#xff0c;访客的留存和继续阅读将会增强&#xff0c;同样从优化角度来说会更加有利于搜索引擎抓取时对页面质量的提升&#xff0c;毕…...

【QML】Qt和QML获取操作系统类型

1. Qt获取系统类型 //方法 QSysInfo::productType()//举例&#xff1a; if(QSysInfo::productType() "windows") {qDebug() << "windows system"; }官方说明&#xff1a; [static] QString QSysInfo::productType() Returns the product name of …...

CSS 显示、定位、布局、浮动

一、CSS 显示&#xff1a; CSS display属性设置元素应如何显示&#xff1b;CSS visibility属性指定元素应可见还是隐藏。隐藏元素可以通过display属性设置为“none”&#xff0c;也可以通过visibility属性设置为“hidden”。两者的区别&#xff1a;visibility:hidden可以隐藏某…...

Java 学习笔记

文章目录 一、集合1.1 List1.1.1 ArrayList1.1.2 Vector1.1.3 LinkedList 1.2 Deque1.3 Set1.4 Map1.4.1 HashMap1.4.2 LinkedHashMap 1.5 注意事项 二、函数式接口和 Lambda 表达式三、方法引用3.1 静态方法引用3.2 实例方法引用3.2 特定类型的方法引用3.4 构造器引用 四、Str…...

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet

1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面&#xff0c;让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…...

Go语言函数参数

文章目录 Go语言函数参数1. **函数参数的定义**&#xff1a;2. **参数的数量**&#xff1a;3. **参数的数据类型**&#xff1a;4. **参数的命名**&#xff1a;5. **参数的传递**&#xff1a;6. **参数的传递方式**&#xff1a;7. **空白标识符**&#xff1a; Go语言函数参数 在…...

【遍历二叉树的非递归算法,二叉树的层次遍历】

文章目录 遍历二叉树的非递归算法二叉树的层次遍历 遍历二叉树的非递归算法 先序遍历序列建立二叉树的二叉链表 中序遍历非递归算法 二叉树中序遍历的非递归算法的关键&#xff1a;在中序遍历过某个结点的整个左子树后&#xff0c;如何找到该结点的根以及右子树。 基本思想&a…...

数模之线性规划

线性规划 优化类问题&#xff1a;有限的资源&#xff0c;最大的收益 例子: 华强去水果摊找茬&#xff0c;水果摊上共3个瓜&#xff0c;华强总共有40点体力值,每劈一个瓜能带来40点挑衅值,每挑一个瓜问“你这瓜保熟吗”能带来30点挑衅值,劈瓜消耗20点体力值&#xff0c;问话消耗…...

【C++】AVL树的4中旋转调整

文章目录 前提一、AVL树的结构定义二、AVL的插入&#xff08;重点&#xff09;1. 插入的结点在较高左子树的左侧&#xff08;右单旋&#xff09;2. 新节点插入较高右子树的右侧&#xff08;左单旋&#xff09;3.新结点插入较高右子树的左侧&#xff08;先右单旋再左单旋&#x…...

【MATLAB源码-第69期】基于matlab的LDPC码,turbo码,卷积码误码率对比,码率均为1/3,BPSK调制。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 本文章介绍了卷积码、Turbo码和LDPC码。以相同的码率仿真这三种编码&#xff0c;并对比其误码率性能 信源输出的数据符号&#xff08;二进制&#xff09;是相互独立和等概率的&#xff1b; 信道是加性白高斯噪声信道&#…...

Java获取时间戳、字符串和Date对象的相互转换、日期时间格式化、获取年月日

获取时间戳&#xff08;自1970年1月1日经历的毫秒数值&#xff09; package org.example;import java.util.Date;public class Main {public static void main(String[] args) {Date date1 new Date(1699540662210L);System.out.println(date1.getTime());Date date2 new Dat…...

用c语言实现矩阵转置

下面是在 C 语言中实现矩阵转置的示例代码&#xff1a; #include <stdio.h> #define ROWS 3 #define COLS 3 void transpose(int matrix[ROWS][COLS]) { int temp; for(int i0; i<ROWS; i) { for(int j0; j<i; j) { temp matrix[i][j]; matrix[i][j] matrix[j]…...

蓝桥杯官网练习题(移动距离)

题目描述 X 星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。其楼房的编号为 1,2,3, 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 比如&#xff1a;当小区排号宽度为 6 时&#xff0c;开始情形如下&#xff1a; 1 2 3 4 5 6 12 …...

不止于“初见成效”,阿斯利康要让数据流转,以 AI 带动决策智能

“阿斯利康数字化成果在进博会上引人注目&#xff0c;令我感到非常高兴。”这是阿斯利康代表的感慨。 数字化建设目标是利用先进技术来提高企业运营效率&#xff0c;降低成本。在第六届进博会的7.2 B2-01展区&#xff0c;阿斯利康不仅展示了全球领先的生物医药和医疗器械成果&a…...

nav2 调节纯追踪算法

纯追踪算法 纯追踪基础 The core idea is to find a point on the path in front of the robot and find the linear and angular velocity to help drive towards it. 核心思想是在机器人前方的路径上找到一个点&#xff0c;并找到一个合适的线速度和角速度&#xff0c;以驱…...

安装RabbitMQ

安装RabbitMQ 下载需要的两个包 # 这直接就可以安装了&#xff0c;下面 ‘上传对应的rmp包’ 操作 [rootrabbitmq-1 ~]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash [rootrabbitmq-1 ~]# yum install erlang-21.3.8.2…...

Spring基础(1):两个概念

最近看了点Spring的源码&#xff0c;于是来稍微扯一扯&#xff0c;希望能帮一部分培训班出身的朋友撕开一道口子&#xff0c;透透气。 广义上的Spring指的是Spring整个项目&#xff0c;包含SpringBoot、SpringCloud、SpringFramework、SpringData等等&#xff0c; 本系列文章…...

Transformer架构解析:从原理到工程实践

1. 从序列到序列的革命&#xff1a;Transformer架构解析2017年那篇著名的《Attention Is All You Need》论文彻底改变了自然语言处理的游戏规则。当时我在处理一个多语言机器翻译项目&#xff0c;传统的RNN模型在长文本翻译中表现乏力&#xff0c;直到Transformer的出现让我们团…...

Unity游戏自动翻译终极指南:3种安装方法+5大实用技巧

Unity游戏自动翻译终极指南&#xff1a;3种安装方法5大实用技巧 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而无法畅玩心仪的日文或韩文Unity游戏&#xff1f;是否在游戏过程中…...

AI编码助手如何实现Web质量优化:从Lighthouse审计到工程实践

1. 项目概述&#xff1a;为你的AI编码助手注入Web质量优化技能 如果你和我一样&#xff0c;每天都在和React、Vue或者Next.js这些框架打交道&#xff0c;那你肯定也经历过这种时刻&#xff1a;项目上线前&#xff0c;打开Lighthouse跑个分&#xff0c;看着那一堆红色的“待改进…...

ECOC多分类方法:原理、实现与优化策略

1. 理解错误校正输出编码&#xff08;ECOC&#xff09;的核心思想在机器学习领域&#xff0c;多分类问题一直是个有趣的挑战。想象一下&#xff0c;你手头有一堆专门解决"是或否"问题的工具&#xff08;比如逻辑回归、支持向量机&#xff09;&#xff0c;但现在需要处…...

别再重装VSCode了!2026内存优化终极 checklist:12项配置项+8个进程级kill命令+1个自研memory-guard插件

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode 2026内存优化的底层动因与诊断范式 VSCode 2026 版本将内存管理从“被动回收”转向“预测性约束”&#xff0c;其核心动因源于 Electron 28 对 V8 堆快照的细粒度控制能力&#xff0c;以及语言服…...

时间序列预测:古典方法为何优于机器学习?

1. 时间序列预测&#xff1a;古典方法与机器学习算法的世纪对决作为一名从业十余年的数据科学家&#xff0c;我见证了时间序列预测领域从传统统计方法到深度学习浪潮的完整演进。每当看到同行们不假思索地套用LSTM解决所有预测问题时&#xff0c;我总忍不住想分享2018年那项颠覆…...

MIUI自动化任务脚本:3个核心技巧解决小米社区重复性工作

MIUI自动化任务脚本&#xff1a;3个核心技巧解决小米社区重复性工作 【免费下载链接】miui-auto-tasks 一个自动化完成小米社区任务的脚本 项目地址: https://gitcode.com/gh_mirrors/mi/miui-auto-tasks 你是否厌倦了每天手动登录小米社区完成签到、观看视频、领取积分…...

Weka回归算法实战:从入门到工业级应用

1. Weka与回归算法概述Weka作为一款开源的机器学习工具集&#xff0c;以其图形化界面和丰富的算法库闻名于数据科学领域。我第一次接触Weka是在2012年的一个数据挖掘项目中&#xff0c;当时就被它"开箱即用"的特性所吸引。回归分析作为预测建模的核心技术&#xff0c…...

Pomotroid:终极免费番茄工作法计时器,如何快速提升专注效率的完整指南

Pomotroid&#xff1a;终极免费番茄工作法计时器&#xff0c;如何快速提升专注效率的完整指南 【免费下载链接】pomotroid :tomato: Simple and visually-pleasing Pomodoro timer 项目地址: https://gitcode.com/gh_mirrors/po/pomotroid 在当今快节奏的工作和学习环境…...

终极Divinity Mod Manager完全指南:告别模组混乱,轻松管理《神界:原罪2》模组

终极Divinity Mod Manager完全指南&#xff1a;告别模组混乱&#xff0c;轻松管理《神界&#xff1a;原罪2》模组 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/Divini…...