每天学点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
目录
相关文章
|
7月前
|
NoSQL Linux 文件存储
GDB学习入门之gdb准备2
GDB学习入门之gdb准备2
59 0
GDB学习入门之gdb准备2
|
7月前
|
NoSQL
GDB调试学习(三):观察点
GDB调试学习(三):观察点
73 0
本地内核调试神器 —— livekd 使用总结
本地内核调试神器 —— livekd 使用总结
|
7月前
|
机器学习/深度学习 存储 NoSQL
【Linux系统编程】代码调试工具gdb--2
【Linux系统编程】代码调试工具gdb--2
|
7月前
|
机器学习/深度学习 NoSQL Linux
【Linux系统编程】代码调试工具gdb--1
【Linux系统编程】代码调试工具gdb--1
|
7月前
|
NoSQL IDE Linux
《Linux从练气到飞升》No.09 Linux调试器-gdb使用
《Linux从练气到飞升》No.09 Linux调试器-gdb使用
57 0
《Linux从练气到飞升》No.09 Linux调试器-gdb使用
|
NoSQL Linux 编译器
Linux工具学习之【gdb】
vim 可以编写代码,gcc/g++ 可以编译代码,此时只最后一件神器,就能进行完整的开发工作,那就是通过 gdb 调试代码,毕竟谁都不敢保证自己的代码没有问题,所以就有调试器这种东西帮助我们定位问题,进而解决问题
208 0
Linux工具学习之【gdb】
|
NoSQL C语言 Linux
gdb使用笔记
gdb是一款UNIX及UNIX-like下的调试工具,本文是对于gdb在Linux下使用的基本命令的总结gdb调试视频演示,gdb调试基础指令,gdb调试其他命令,gdb常见错误说明
109 0
gdb使用笔记
|
存储 NoSQL JavaScript
如何优♂雅地学习GDB调试(二)
本章我们将带着大家高雅的学一学令众多习惯图形化页面的朋友难受的 gdb 调试,这部分知识可以选择性学习学习,以后倘若遇到一些问题时能在 Linux 内简单调试,还是很香的。然后在讲讲 gcc 和 g++,系统讲解程序运行时的各个过程。
212 0
如何优♂雅地学习GDB调试(二)
|
NoSQL Linux C语言
如何优♂雅地学习GDB调试(一)
本章我们将带着大家高雅的学一学令众多习惯图形化页面的朋友难受的 gdb 调试,这部分知识可以选择性学习学习,以后倘若遇到一些问题时能在 Linux 内简单调试,还是很香的。然后在讲讲 gcc 和 g++,系统讲解程序运行时的各个过程。
242 0
如何优♂雅地学习GDB调试(一)