gbd的简单使用(一)

这篇文章将gdb的简单使用,通过此篇文章你能学习到使用gdb进行调试程序

在Linux中编写程序时,如何进行程序的debug工作呢?今天来介绍下gdb这个工具,可以在Linux下直接man gdb查看帮助信息

(一)gdb命令介绍

常用命令:

命令命令缩写命令说明
runr开始运行程序,在第一个断点处停住
startst启动调试,在main函数中第一条语句停住
nextn执行下一行,不会进入函数内部
steps执行下一条语句,会进入函数
displaydisp查看某个变量,每次停下来都会显示它的值
infoi查看程序信息
breakb设置断点
printp打印变量值
continuec继续运行程序
set var name=value设置变量的值
listl显示程序源码,默认显示10行
killk终止程序调试
watch监视变量值的变化
breaktracebt查看函数调用信息
quitq退出gdb环境

基础操作:
(1)编译调试程序 :gcc -g xxx.c -o xxx
(2)进入gdb环境 : gdb xxx
(3)根据需求执行上面的命令
(4) 退出gdb

(二)实例运行

test.c

#include <stdio.h>int main(int argc, char *argv[])
{int a=0,b=0,c=0;a=1;b=2;c=a+b;printf("a=%d,b=%d,c=%d\n",a,b,c);return 0;
}

zhixia# gcc -g test.c -o test
zhixia# gdb test
通过上面的操作已经进入了gdb环境了
输入list查看代码:从上次位置开始显示,默认一次显示10行

(gdb) list
1	#include <stdio.h>
2	
3	int main(int argc, char *argv[])
4	{
5	   int a=0,b=0,c=0;
6	   a=1;
7	   b=2;
8	   c=a+b;
9	   printf("a=%d,b=%d,c=%d\n",a,b,c);
10	   return 0;
(gdb) 

设置断点:执行到此位置会停下来
break line/function/
查看断点信息 : info b
删除断点:delete breakpoints 断点号
使能断点: enable 断点编号
失能断点: disable 断点编号

(gdb) break 7
Breakpoint 1 at 0x400551: file test.c, line 7.  //断点编号是1
(gdb) r
Starting program: /root/test/test Breakpoint 1, main (argc=1, argv=0x7fffffffdf78) at test.c:7
7	   b=2;

显示变量值:display

(gdb) display a
1: a = 1
(gdb) 

单步调试命令:next/step
step n,next n 表示连续单步执行n条指令,如果期间遇到断点,则停下来

(gdb) next
8	   c=a+b;
1: a = 1
(gdb) step
9	   printf("a=%d,b=%d,c=%d\n",a,b,c);
1: a = 1
(gdb) 

打印变量信息print

(gdb) p a
$1 = 1
(gdb) 

set var name=value
在程序运行中动态改变变量的值

(gdb) set var a=4
(gdb) p a
$2 = 4
(gdb) 

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

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

相关文章

java发送内嵌图片邮件

前言&#xff1a; 博客系统中需要邮件服务的功能&#xff0c;以前写过类似的功能&#xff0c;不过功能太简单了&#xff0c;仅仅是发送文本内容&#xff0c;现在尝试一下发送内嵌图片邮件&#xff01; 准备工作&#xff1a; 请参考&#xff1a;http://www.cnblogs.com/hujunzhe…

调试跟踪利器---strace

通过这篇文章你会学习到strace的用法&#xff0c;strace可以帮助你高效地定位进程中的一些错误&#xff0c;关于strace的用处有很多&#xff0c;可以自行发掘 前面我们讲解了gdb调试程序,这篇文章介绍另一个调试跟踪工具strace&#xff0c;同样你可以在linux下执行man strace查…

MBR、DBR、FAT32基础小知识

MBR-------主引导记录 1.创建时间&#xff1a;由分区软件&#xff08;Fdisk/PartitionMagic/Windows 2000/Windows XP安装 工具等&#xff09;给 硬盘分区时建立的。 2.功能 &#xff1a;存放硬盘分区信息和引导系统时检查分区。 3.作用范围&#xff1a;MBR和虚拟MBR控制着整个…

java使用Executor(执行器)管理线程

一.一个实现了Runnable接口的类 class MyThread implements Runnable{private static int num 0;Overridepublic void run() {while(true){synchronized(MyThread.class){num;try{Thread.sleep(500);} catch(Exception e){System.out.println(e.toString());}System.out.print…

JMM和happens-before原则

JMM&#xff1a; Java Memory Model(Java内存模型)&#xff0c;围绕着在并发过程中如何处理可见性、原子性、有序性这三个特性而建立的模型。 可见性&#xff1a; JMM提供了volatile变量定义、final、synchronized块来保证可见性。  例如&#xff1a;线程a在将共享变量x1写入…

SD卡移植FAT32文件系统无MBR

问题&#xff1a;在研究SD卡和FAT32文件系统的时候&#xff0c;发现SD卡有的有MBR&#xff0c;有的没有MBR&#xff0c;这个为什么呢&#xff1f; 分析&#xff1a;MBR是主引导记录&#xff0c;是在给磁盘分区的时候建立的&#xff0c;我们的SD卡没有这个可能就是没有进行过分区…

java获取类的信息

关键技术剖析 1.java.lang.reflect包实现了java的反射机制&#xff0c;在使用反射机制时&#xff0c;需要导入该包。 2.Class类的forName方法能够根据类名加载类&#xff0c;获得类的Class对象。 Class类的getSuperclass方法获得父类的Class对象&#xff1b;getDeclaredFields方…

FAT32文件系统介绍

FAT32文件系统&#xff08;一&#xff09;为什么要有文件系统&#xff08;二&#xff09;FAT32文件系统组成&#xff08;三&#xff09;分步介绍各部分(1) 首先介绍一下MBR(2)DBR介绍(3)FAT表介绍(4) 数据区&#xff08;一&#xff09;为什么要有文件系统 文件系统是操作系统用…

java中动态代理实现机制

前言&#xff1a; 代理模式是常用的java设计模式&#xff0c;它的特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。代理类与委托类之间通常会存在关联关系&#xff0c;一个代理类…

libiconv库简单裁剪支持CP437编码

有许多人在做项目的时候都会遇到字符编码的不一致导致的乱码问题&#xff0c;那如何去解决呢&#xff1f;在Linux系统上可以通过iconv函数族来进行编码转换&#xff0c;但有时候我们并不需要全部的字符集&#xff0c;因为可能会占用比较大的空间&#xff0c;本文主要支持CP437编…

简单java在线测评程序

简单java程序在线测评程序 一&#xff0e;前言 大家过年好&#xff01;今年的第一篇博客啊&#xff01;家里没有网&#xff0c;到处蹭无线&#xff01;日子过得真纠结&#xff01;因为毕设的需求&#xff0c;简单写了一个java程序在线测评程序&#xff0c;当然也可以在本地测试…

指针强制类型转换触发内存自动对齐

C语言的指针是我们操作很灵活&#xff0c;但是也留下了不少坑&#xff0c;今天工作遇到了一个指针的坑&#xff0c;这里复现一下&#xff1a; 指针类型强制转换,并进行解引用,引起的内存对齐问题.&#xff08;一&#xff09;问题复现&#xff1a; 运行环境&#xff1a;Ubuntu …

简单文本编辑器

一、前言 聚天地之灵气&#xff0c;集日月之精华&#xff01;一个简单的java文本编辑器由此而生。毕设所需&#xff0c;很是无奈&#xff01; 二、界面预览 三、实现思路 1.字体选择器的实现 (1).字体类 class MyFont{private Font font;private Color color;public Font getFo…

u-boot新增命令后出现data abort

&#xff08;一&#xff09;问题描述 u-boot下新增了一条update的命令&#xff0c;直接输入update没有报错&#xff0c;但是输入up按TAB键补全时发现出现data abort&#xff0c;而且输入不支持的命令也会有data abort &#xff08;二&#xff09;解决方法 最开始我包含的头…

sublime text学习

Ctrl / ---------------------注释 Ctrl 滚动 --------------字体变大/缩小 Ctrl N-------------------新建 软件右下角可以选择文档语法模式 Ctrl Shift P ------------------命令模式 命令&#xff1a; sshtml模糊匹配-----语法切换到html模式&#xff0c;同理所得&am…

core文件如何分析

目录(一&#xff09;什么是coredump(二)coredump产生的条件&#xff08;1&#xff09;coredump产生主要原因&#xff1a;&#xff08;2&#xff09;如何生成coredump(三&#xff09;gdb使用(四&#xff09;实例调试coredump文件(五&#xff09;总结(一&#xff09;什么是coredu…

SpringMVC+FreeMarker

前言&#xff1a; 最近在学习SpringMVC&#xff0c;模板引擎用的是FreeMarker&#xff0c;之前没有接触过。利用SpringMVC开发其实还有许多的步骤&#xff0c;比如控制层&#xff0c;服务层&#xff0c;持久化层&#xff0c;实体等等&#xff0c;先弄了一个小demo来总结一下Spr…

SpringMVC那点事

一、SpringMVC返回json数据的三种方式 1、第一种方式是spring2时代的产物&#xff0c;也就是每个json视图controller配置一个Jsoniew。 如&#xff1a;<bean id"defaultJsonView" class"org.springframework.web.servlet.view.json.MappingJacksonJsonView&q…

js学习内容的整理

1、jquery动态添加Table中的一行 function addTableRow(tableId){var html <tr>\......\</tr>";//行首插入一行if($(#tableId).find(tr).length 1){$(html).insertAfter($(#tableId).find(tr).eq(0));} else { $(html).insertBefore($(#tableId).find(tr).e…

(一)最邻近插值python实现

这里写目录标题&#xff08;一&#xff09;原始图像&#xff08;二&#xff09;最邻近插值实现&#xff08;三&#xff09;python实现1. 安装库2. python程序编写3. 效果4. 工程文件&#xff08;一&#xff09;原始图像 &#xff08;二&#xff09;最邻近插值实现 一般情况下我…