每天学点GDB(一)

简介: GDB的功能很多,一下子全弄明白似乎不太可能。本文我们先聊聊简单的Hello World,以及如何让GDB在断点处打印一下诊断信息。

<一>简单示例——Hello World

在Linux环境下进行C或是C++编程,调试工具首选GDB。

GDB的功能很多,一下子全弄明白似乎不太可能。那么就从最简单的使用说起吧。一谈起简单,Helloworld就成了最佳的选择了。

#include <stdio.h>
#include <stdlib.h>
4 int main(int argc, char** argv) {
    printf("hello,world\n");
    return 0;
}

编译链接

gcc -o hello -g helloworld.c

 好了,现在可执行目标文件hello已经生成,接下来的事情就是用gdb将其载入并运行。

gdb ./hello

接下来的会看到如下的信息。

gdb hello

GNU gdb (GDB) 7.5.1

Copyright (C) 2012 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-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /tmp/hello...done.

(gdb)

显示源代码

(gdb)list 1,10

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv) {
    printf("hello,world\n");
    return 0;
}

设置断点有多种方法,如通过函数名,通过指定源码行数,下面的例子通过指定文件中的行数来设置断点

(gdb)break 7

运行程序

(gdb)run

当检查完相关的变量后,继续运行程序

(gdb)continue

最终,退出gdb

(gdb)quit

ok,重新回到bash shell.

至此一个简单的调试例子完整的过了一遍,是的,平淡的如白开水一般。

<二>如何让GDB在断点处打印一下诊断信息

在一中提到GDB最最基本的用法,在本节主要讲述一下如何让GDB在断点处打印一下诊断信息,但程序执行本身不会中断。

先稍微改一改源程序

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv) {
  int i = 0;
  printf("hello,world\n");
  for ( i = 0; i < 20; i++ ) {
    printf("now, the seq is %d\n",i);
  }
  return 0;
}

假设要在执行期间查看i值的变化。如果是step by step的办法,具体步骤如下。

设置断点

gdb)break 8

执行程序

gdb)run

在断点处停止执行,执行如下指令显示i的值

gdb)p i

继续程序执行

gdb)continue

上述步骤会一直重复出现,如果想一次性设定后,让程序执行不因断点设置而中断,可采用下述办法。

gdb)commands

Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>silent
>p i
>conti
>end

输入end表示在断点处的批处理结束,再次回到gdb。

p i 表示指印i的值

conti 表示继续程序执行

gdb)run

这样每次在断点处会自动打印变量i的值,并继续执行剩下的程序。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
存储 运维 NoSQL
Redis7.0 核心特性简介
Redis自 2009 年诞生以来,已经走过了 13 年。在这漫长的 13 年中,Redis 从小小的开源项目逐步演变成为当今最受欢迎的内存数据库之一,被用于多种场景,帮助解决很多问题
4289 0
Redis7.0 核心特性简介
|
6月前
|
芯片
基于模拟I2C协议驱动SD3078时钟芯片
基于模拟I2C协议驱动SD3078时钟芯片
|
5月前
|
自然语言处理 关系型数据库 MySQL
《理解MySQL数据库》字符集深度解析:从编码原理到多语言实战
本文系统介绍MySQL字符集与编码基础、UTF8MB4等常用字符集特性、校对规则、多层级配置方法及存储性能影响,涵盖字符集转换、兼容性问题、Java应用集成与故障排查,提供完整最佳实践方案。
|
8月前
|
存储 Ubuntu 安全
Linux中Centos和Ubuntu的区别
CentOS主要面向服务器环境,而Ubuntu适用于服务器和桌面环境。   CentOS提供更精简的安装,而Ubuntu提供更广泛的开箱即用功能。   CentOS遵循RHEL的所有安全实践,而Ubuntu在安全方面采取更积极的方法。
|
vr&ar Android开发 数据安全/隐私保护
Android与iOS的演变:一场永无止境的技术较量
【10月更文挑战第27天】 在智能手机操作系统的领域里,Android和iOS一直是两个不可忽视的巨头。它们不仅推动了移动设备技术的快速发展,也引领了用户界面设计和应用程序生态的潮流。本文将探讨这两个系统从诞生到现在的发展轨迹,以及它们之间的竞争如何塑造了今天的移动科技世界。
404 1
|
存储 人工智能 供应链
AI与能源系统:优化能源生产和消费
【10月更文挑战第9天】在当前全球能源转型的关键时期,人工智能(AI)正逐渐成为推动能源系统优化与升级的重要力量。本文探讨了AI在能源生产、分配、存储和消费等方面的应用。在能源生产中,AI通过智能预测与调度、故障预警及优化资源配置等方式提升效率;在能源分配与存储方面,AI推动智能电网管理和储能系统优化;在能源消费端,AI实现精细化管理,如智能家庭能源管理和工业节能。未来,AI将进一步融入能源系统的各个环节,促进能源的高效配置与可持续发展。然而,面对数据安全和算法透明度等挑战,需加强监管与伦理审查,确保AI技术健康发展。
|
人工智能 缓存 算法
10年大牛用10000字带你彻底搞懂算法模型:I/O自动机、编程模型!
并发执行算法的模型与顺序执行算法不一样。在设计顺序执行算法时,我们的出发点是如何减少执行的步数(时间开销)和内存的占用空间(空间开销),我们会很习惯地思考第一步做什么、第二步做什么。
|
JavaScript
Element el-check 多选框详解
本文目录 1. 用途 2. 普通多选框 3. 带边框的多选框 4. 多选框组 5. 按钮样式的多选框组 6. 多选框组选中数量限制 7. 选项通过变量自动生成 8. 小结
1303 0
Element el-check 多选框详解
【数据结构】双向链表中删除节点的方法实现(代码+详解)
【数据结构】双向链表中删除节点的方法实现(代码+详解)
870 0
|
开发框架 安全 前端开发
实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统
实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统
488 0

热门文章

最新文章

下一篇
开通oss服务