初学GDB(1)

2024-09-01 00:38
文章标签 gdb 初学

本文主要是介绍初学GDB(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

The C Programming Language 1.5.1节中的程序copy.c为例:

#include <stdio.h>
main()
{int c;while ((c = getchar()) != EOF){putchar(c);}
}

用gcc进行编译gcc -g copy.c -o copy,-g表示生成调试信息。
然后就可以用gdb进行调试了gdb copy -q,-q用于忽略gdb的版本信息等。
输入命令l可以显示代码。
在第5行插入断点b 5
开始调试r
程序运行到第5行的断点出停止,此时加入观察变量c的命令watch c
单步调试n
此时可以输入一些字符,例如abc,然后回车,发现变量c的值发生了改变,变为了97,即a的ascii码。
继续运行至断点处c,可以看到c的值从97变为98,即b的ascii码。
输入命令c继续运行,看到c的值由98变为99,即c的ascii码。
输入命令c继续运行,看到c的值由99变为10,即换行符\n的ascii码。
输入kill终止程序。
命令info b可以看到所有的断点信息,delete删除断点。
最后用命令q退出gdb调试。

以上的完整版记录如下:

xxx@xxx-VirtualBox:~/test$ gdb copy -q
Reading symbols from copy...done.
(gdb) l
1	#include <stdio.h>
2	int main()
3	{
4		int c;
5		while ((c = getchar()) != EOF){
6			putchar(c);
7		}
8		return 0;
9	}
(gdb) b 5
Breakpoint 1 at 0x804845c: file 1-5-1-copy.c, line 5.
(gdb) r
Starting program: /home/ant/test/copy Breakpoint 1, main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) watch c
Hardware watchpoint 2: c
(gdb) n
abcHardware watchpoint 2: cOld value = 134513841
New value = 97
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) c
Continuing.Hardware watchpoint 2: cOld value = 97
New value = 98
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) c
Continuing.Hardware watchpoint 2: cOld value = 98
New value = 99
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) c
Continuing.Hardware watchpoint 2: cOld value = 99
New value = 10
0x08048474 in main () at 1-5-1-copy.c:5
5		while ((c = getchar()) != EOF){
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x0804845c in main at 1-5-1-copy.c:5breakpoint already hit 1 time
(gdb) delete
Delete all breakpoints? (y or n) y
(gdb) q

这篇关于初学GDB(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125456

相关文章

GDB调试程序入门

http://blog.csdn.net/haoel/article/details/2880 用GDB调试程序 GDB概述 ———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所

git的使用和gdb工具

1.git的使用 首先现在gitee上新建一个仓库 然后复制克隆链接到本地仓库 在本地仓库中,我们可以用git status查看仓库状态 我们要提交代码就是要三步 git add 文件名 git commit -m "写提交的日志" git push 将代码上传到远端仓库 然后你就完成一次提交了 2.调试工具gdb 程序的发布模式有两种,de

GDB watch starti i files

watch break starti 在程序的最初开始运行的位置处断下来 ​​ i files 查看程序及加载的 so 的 sections ​​

GDB 查看汇编

查看汇编 x disassemble

【Linux】GDB的使用(工具篇)

文章目录 背景GDB的基本功能       背景 Linux gcc/g++出来的二进制程序,默认是release模式要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项程序的发布方式有两种,debug模式和release模式 debug 与 release的区别 在软件开发中,Debug(调试)和 Release(发布)版本有以下一些主要区别:

GDB 反向调试

使用调试器时最常用的功能就是step, next, continue,这几个调试命令都是“往下执行”的, 但是很多时候会有这种需求:你在调试的过程中多跳过了几步而错过中间过程,这时候不得不重头调试一遍,非常麻烦。而GDB从7.0版本开始支持反向调试功能,也就是允许你倒退着运行程序,或者说撤销程序执行的步骤从而会到以前的状态。   直观地来看,加入你正在使用GDB7.0以上版本的调试器并且运行在

Vue初学-简易计算器

最近在学习Vue的指令,做了一个简易计算器,比较适合刚入门的人参考学习。用到的知识点有: 1.插值表达式 2.v-model,双向绑定+、-、*、/、**等操作符 3.v-show,控制操作数2是否显示,乘方时不显示操作数2 4.methods选项,定义了calculate ()方法,实现各种运算 5.watch选项,监听selected的值的变化。 下面是程序的执行效果: 如果选择的是**乘

Mindspore 初学教程 - 3. Tensor 张量

张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在  n n n 维空间内,有  n r n^{r} nr 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。 r r r 称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 张量是一种特殊的数据结构,

Python 初学入门必会基础知识

引言 Python 是一种易学易用的编程语言,适用于各种应用场景,包括网站开发、数据分析、人工智能等。对于零基础的学习者来说,掌握 Python 编程语言是一个很好的起点。本文将详细介绍零基础学习 Python 所需的知识点,帮助初学者快速入门。 CSDN大礼包:《2024年最新全套学习资料包》免费分享 1.首先需要安装Python 学习 Python 的第一步是安装 Python

关于GDB运行时No symbol table is loaded. Use the “file“ command.的解决方法

最近有同学问GDB使用的问题,对此做一个整理。 首先,GDB已经报错file找不到了,那可以运行file test检测一下 (gdb) file testReading symbols from test...(no debugging symbols found)...done. 发现找不到可执行文件,所以问题应该在于编译时候没有加上ggdb3,重新编译一下 ty@ubuntu: