gdb调试 入门

news2024/10/7 12:25:53

程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。

 You can run "gdb" with no arguments or options; but the most usual
       way to start GDB is with one argument or two, specifying an
       executable program as the argument:

               gdb program

       You can also start with both an executable program and a core file
       specified:

               gdb program core

       You can, instead, specify a process ID as a second argument or use
       option "-p", if you want to debug a running process:

               gdb program 1234
               gdb -p 1234

       would attach GDB to process 1234.  With option -p you can omit the
       program filename.

本文将主要介绍linux下运行。

GDB中的命令很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。

在这里插入图片描述

1.1 编译 可共GDB 调试的程序

新建test.c 输入以下内容:

#include <stdio.h>
void  f(){
    printf(" f is called \n");
}

int i =1;

int main(){
    f();
    i = 4;
    printf(" Hello world!\n");
}

要调试C/C++的程序,首先在编译时,要使用gdb调试程序,在使用gcc编译源代码时必须加上“-g”参数。

gcc -g test.c

保留调试信息,否则不能使用GDB进行调试.

有一种情况,有一个编译好的二进制文件,你不确定是不是带有-g参数,带有GDB调试,这个时候你可以使用如下的命令验证:

gdb  a.out

如果没有调试信息,则会出现:
Reading symbols from a.out…
(No debugging symbols found in a.out

如果带有调试功能,下面会提示
Reading symbols from a.out……done.

使用命令readelf查看可执行文件是否带有调试功能:

readelf -S main|grep debug

如果有debug说明有调试功能,如果没有debug。说明没有带有调试功能,则不能被调试。

1. 基本用法

1. 1 gdb 中运行程序

通过 gdb + 可执行文件 , 开始调试需要的文件。

gdb  a.out 

输入,
run :将运行整个程序,
list: 显示出原始的代码, 可以输入多次, 直到显示完整的代码。
quit: 退出gdb 模式。

(gdb) run
Starting program: /home/respecting-life/Desktop/os_上交/lab1/a.out 
 f is called 
 Hello world!
[Inferior 1 (process 5403) exited normally]


(gdb) list
1	#include <stdio.h>
2	
3	void  f(){
4	    printf(" f is called \n");
5	}
6	
7	
8	int i =1;
9	
10	int main(){
(gdb) list
11	    f();
12	    i = 4;
13	    printf(" Hello world!\n");
14	}


1.2 打断点

gdb 中打断点的方式, 有两种

  1. 对某个函数打断点。 ``
(gdb) break main
Breakpoint 1 at 0x555555555160: file test.c, line 10.
  1. 指定在某一行处打断点。
(gdb) b  11
Breakpoint 2 at 0x555555555168: file test.c, line 11
  1. 查看断点的信息 info b

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

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

相关文章

ANDROID ROOT FIDDLER HTTPS 抓包

参考 adb 修改手机代理方式_userwyh的博客-CSDN博客_adb shell settings put global http_proxy 手机模拟器安装证书并抓包_虚无-缥缈的博客-CSDN博客_模拟器安装证书 安卓手机使用adb添加系统证书方法 - 知乎 设置设备代理&#xff08;需要ROOT 设置代理&#xff1a; adb…

【重新安装Anaconda心得】

文章目录&#xff08;一&#xff09;环境变量设置&#xff08;二&#xff09;Anaconda添加镜像源【可以使用境外流量不用添加】&#xff08;三&#xff09;创建虚拟环境的细节&#xff08;四&#xff09;补充&#xff1a;conda的常用命令&#xff08;一&#xff09;环境变量设置…

算法篇------贪心1

文章目录贪心的概念题目1------经典的选择排序&#xff08;简单&#xff09;题目2----平衡字符串&#xff08;简单&#xff09;题目3---买卖股票的最佳时间(中等)题目4------跳跃游戏(中等)题目5-------钱币找零题目6------多机调度的问题贪心的概念 什么是贪心算法&#xff1…

ATF源码篇(九):docs文件夹-Components组件(8)固件升级

固件更新&#xff08;FWU&#xff09; 本文档描述了TF-A中可用的各种固件更新&#xff08;FWU&#xff09;机制的设计。 1、PSA固件更新&#xff08;PSA FWU&#xff09;-平台安全架构2、TBBR固件更新&#xff08;TBBR FWU&#xff09;-可信板引导要求 PSA固件更新实施了同名…

[附源码]java毕业设计课程作业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

vtk拾取器-vtkAbstractPicker/vtkCellPicker

创建了VTK社区&#xff0c;欢迎大家加入雪易社区-CSDN社区云 简介&#xff1a;此文主要介绍vtk中的拾取器的用法&#xff0c;若能为各位小伙伴解决一些困扰就更好了。非常欢迎各位小伙伴指正并补充。 1. vtkAbstractPicker vtkAbstractPicker是vtk拾取器的基类&#xff0c;为…

2022下半年《软考-系统架构设计师》备考经验分享

前言 我参加了2022年11月份的《软考-系统架构设计师》考试&#xff0c;在一个多月的备考之中我总结了一些学习经验和答题技巧&#xff0c;现毫无保留的分享给大家&#xff0c;希望对报考的同学们有所帮助。彩蛋&#xff1a;关注我的公众号【劼哥舍】&#xff0c;回复“软考”即…

dubbo:docker安装dubbo-admin

0.引言 我们在搭建dubbo框架时&#xff0c;需要安装一个dubbo-admin来管理服务已经配置文件&#xff0c;今天我们来看看如何通过docker快速搭建一个dobbo-admin 1. 安装 1、首先到dockerhub上搜索dubbo-admin的镜像源 2、可以看到两个引用较高的镜像源&#xff0c;第一个是a…

SpringCloud和SpringBoot在调Feign传文件时的异常汇总及解决办法

主要记录SpringCloud在调Feign传文件时的问题&#xff1a; 1.&#xff08;按注意点2改正即可&#xff09; Current request is not a multipart request&#xff08;按注意点2改正即可&#xff09; 2.&#xff08;按注意点3处理即可&#xff09; The field files exceeds it…

Pytorch框架基础

目录 1-02张量的简介与创建 pytorch中的Tensor 张量的创建 1-03张量的操作 1. 拼接 2.张量的拼接与切分 3.张量索引 4.张量变换 1-02张量的简介与创建 张量是一个 &#xff0c;它是标量&#xff0c;向量&#xff0c;矩阵的高维拓展 pytorch中的Tensor 在pytorch中的属…

【C++】C++基础知识(七)---指针

C基础知识&#xff08;七&#xff09;1. 指针的定义与使用2. 指针的内存3. 空指针和野指针4. const修饰指针5. 指针与数组6. 指针与函数7. 指针用于数组和函数的案例1. 指针的定义与使用 指针的作用&#xff1a; ------通过指针可以直接的访问变量的内存&#xff0c;内存编号一…

企业在线培训场景下讲师+ppt课件直播应用效果

阿酷TONY / 原创 / 2022-11-17 / 长沙 企业在线培训场景下讲师ppt课件直播应用效果 &#xff1a; 图 / 直播示意图 设备需求&#xff1a; 1. 现场布摄像头&#xff0c;用于采集讲师摄像头视频和音频数据&#xff1b; 2. PC电脑或笔记本电脑一台&#xff08; 安装直播客户端&…

学会Python开发的第一步:写一个桌面小程序

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 当使用桌面应用程序的时候&#xff0c;有没有那么一瞬间&#xff0c; 想学习一下桌面应用程序开发&#xff1f; 建议此次课程大家稍作了解不要浪费太多时间&#xff0c; 因为没有哪家公司会招聘…

科普系列:AUTOSAR与OSEK网络管理比较(下)

在上篇中我们分别在状态机和报文格式方面对OSEK和AUTOSAR网络管理进行了简单介绍&#xff0c;感兴趣的小伙伴请移步至文章《科普系列&#xff1a;AUTOSAR与OSEK网络管理比较&#xff08;上&#xff09;》。 三、OSEK与AUTOSAR网络管理特点对比 本篇就是本文的重点了&#xff…

华为机试 - 区间交集

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 给定一组闭区间&#xff0c;其中部分区间存在交集。 任意两个给定区间的交集&#xff0c;称为公共区间(如:[1,2],[2,3]的公共区间为[2,2]&#xff0c;[3,5],[3,6]的公共区间为[3,5])。 公共区间之间…

Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全

文章目录获取ApplicationContextApplicationContext有什么用获取ApplicationContext使用ApplicationContext获取EnvironmentEnvironment有什么用获取Environment使用Environment获取ApplicationContext ApplicationContext有什么用 ApplicationContext为应用程序提供配置的中…

供应点击化学PEG试剂Azide-PEG-Rhodamine B,叠氮聚乙二醇罗丹明

点击化学PEG试剂——叠氮-聚乙二醇-罗丹明&#xff0c;化学试剂其英文名为Azide-PEG-Rhodamine B&#xff0c;N3-PEG-RB&#xff0c;它所属分类为Azide PEG Fluorescent PEG。 peg试剂的分子量均可定制&#xff0c;有&#xff1a;5000、2000、1000、3400、10000、20000 。该试…

java计算机毕业设计ssm气象百事通系统-天气预报系统

项目介绍 本气象百事通系统是针对目前仓库的实际需求,从实际工作出发,对过去的天气系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念、模型、原…

Matlab:设置日期和时间显示格式

Matlab&#xff1a;设置日期和时间显示格式单个日期和持续时间数组的格式datetime 显示格式duration 显示格式calendarDuration 显示格式默认 格式datetime单个日期和持续时间数组的格式 datetime、duration 和 calendarDuration 数组有一个 Format 属性&#xff0c;可控制每个…

【java篇】你真的了解“基本数据类型”吗?

目录 基本介绍&#xff1a; 整数类型 浮点类型 布尔类型和char类型 自动类型转换 数据类型转换必须满足如下规则&#xff1a; 基本介绍&#xff1a; Java是一门强类型语言&#xff0c;这就意味着必须为每一个变量声明一种类型。Java为我们提供了八种基本类…