开发工具——gdb

news2024/9/22 8:24:18

开发工具gdb

gdb在Linux下负责程序的调试。

gdb相较于vs2019的调试,是不方便的。图形化界面调试确实是一种进步的现象。

先编写一个简单的程序,如果不支持在for循环中定义变量,要在编译指令后面加上-std=c99选项。

要编译的文件和要生成的文件位置要正确,位置反了的话源代码就没了。

用gdb调试只需要在当前路径下输入gdb指令,后面跟上要调试的可执行文件。不是源代码文本文件,是可执行文件。

但是发现no debugging symbols found,也就是说默认生成的可执行文件是不可调试的。quit退出。

vs2019中C语言程序的发布方有两种:debug和release,默认情况下是debug,所以默认情况下就可以调试。而在Linux中,默认情况下是release版本。如果要生成debug版本的可执行程序,需要加上选项:-g

debug发布会提供一些调试信息。而release发布是没有调试信息的。从文件大小也能看出debug发布的可执行程序比release发布的可执行程序大。

如何证明调试信息的存在?

命令:readelf -S [可执行程序]

可以以段的方式读取可执行,可以让每个可执行程序的结构信息显示出来。

但是看不懂,筛选一下:

add_g存在debug相关信息,而add中则不存在。所以debug发布才会比release发布大一些。

gdb进入调试后在gdb命令行输入l(list的简写)会显示代码:

默认从第4行显示,想要从第1行显示输入l 0:

l main则可以将包含main的代码显示出来:

从中可以观察到l只能显示10行代码。

直接按回车则会显示上一条命令的下一段10行代码。不足10行就有多少显示多少,没有就说明没有了。

打断点: b(breakpoint的简写)后面加上断点的行数

完成打断点后会显示断点信息。每次使用gdb都需要重新打断点。

断点信息表示:断点1,在文件add.c的第15行

如果想要查看断点:info b

在vs2019中,f9打断点,打好断点后,一运行就会立刻执行到断点处停止。

在Linux下,运行:r(run的简写)

最好打两个断点,一个断点可能会出什么错。

想要看此时start的数据:p(printf的简写)start,还可以看start的地址:

当程序在第一个断点处停止时,再次r,程序会直接结束,使用s(step简写)指令,逐语句(vs2019中f11)执行语句。断点在AddToTop函数所在行,如果不想进入函数,就要逐过程(vs2019中f10)执行,使用指令n(next简写)指令。

如何删除断点?

使用d指令(delete的简写):d + 断点编号,不是断点所在行数。

看当前函数的调用堆栈则使用bt指令

Linux下查看变量的值可以使用p指令,但p指令只能显示某个时间点变量中存的值,如何让Linux程序中的变量常显示?

使用指令display + 变量名,等价于vs2019下的监视窗口。

每个常显示变量前有一个序号,如果不想常显示某个变量,就使用指令undisplay + 变量前的编号。

假设我现在在调试一个循环语句,调试了一些后发现循环没有问题,现在不想调试循环了。如何跳出循环?

使用until指令,until + 跳转的代码行数,中间的代码会自动执行完。

从一个断点处运行到下一个断点处,需要使用c指令(continue的简写)

如果进入一个main函数内的函数栈帧,使用finish指令可以立即执行完当前函数,并停止。

在main函数下使用finish指令没有用:

直到显示下列信息,程序才算结束:

gdb的使用比较复杂,繁琐。所以程序员最不喜欢的两件事之一就是调试代码,另一件是写项目相关的文档。

顺便说一下,不要想着复制代码到vs下调试,后面一些代码要用到调用系统的接口,只能在Linux才能运行。不过后面的代码基本不会出错,所以也不要有太大压力。

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

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

相关文章

Spring 源码编译

Spring 源码编译,一定要选好版本!!! Spring 源码编译,一定要选好版本!!! Spring 源码编译,一定要选好版本!!! 重要的事说三遍。 Spri…

MYSQL用函数请三思

背景:最近公司有个同事遇到个需求需要用到mysql sleep函数,但结果却大出意料. 测试如下: 表: CREATE TABLE test_sleep ( id int NOT NULL AUTO_INCREMENT, a int NOT NULL, b int NOT NULL, PRIMARY KEY (id), KEY a (a) ) ENGIN…

电子学会2021年3月青少年软件编程(图形化)等级考试试卷(一级)答案解析

青少年软件编程(图形化)等级考试试卷(一级) 分数:100.00 题数:37 一、单选题(共25题,每题2分,共50分) 1. 花花幼儿园有三个班。根据下面三句话&…

CentosLinux 7 字符安装教程

打开VMware虚拟机,点击文件 — 新建虚拟机选项。在弹出的对话框中选择自定义(高级)选项。单机下一步。 以下步骤根据自己的所需自行配置

[附源码]Python计算机毕业设计Django酒店在线预约咨询小程序

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

健身中心管理系统/健身房管理系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&…

【OpenCV-Python】教程:3-16 利用Grabcut交互式前景提取

OpenCV Python Grabcut分割 【目标】 Grabcut 算法创建一个交互程序 【理论】 从用户角度是如何工作的呢?用户在需要的目标上初始绘制一个矩形,前景目标必须完全在矩形内部,算法迭代的去分割然后得到更好的效果,但是有些情况下…

Java9-17新特性解读,了解少于3个你可能脱节了

前言 Java8出来这么多年后,已经成为企业最成熟稳定的版本,相信绝大部分公司用的还是这个版本,但是一眨眼今年Java19都出来了,相信很多Java工程师忙于学习工作对新特性没什么了解,有的话也仅限于某一块。 本篇就是博主对…

【论文笔记】Radatron: Accurate Detection Using Multi-Resolution Cascaded MIMO Radar

文章及补充材料链接:https://jguan.page/Radatron/ 理解本文需要一些电磁波与雷达信号处理相关的理论知识。 1. 引言 雷达的角度分辨率通常很低。雷达的角度分辨率与雷达的天线孔径成反比,因此毫米波雷达要达到激光雷达的角度分辨率,需要3000…

黑盒测试用例设计 - 因果图法

说明 因果图法是一种适合于描述对多种输入条件组合的测试方法根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法它适合于检查程序输入条件涉及的各种组合情况 使用步骤 第一步:根据功…

60岁首席工程师被SpaceX边缘化,主管:我怕他退休或死了

金磊 发自 凹非寺量子位 | 公众号 QbitAI在SpaceX,连首席工程师竟也能遭遇职场边缘化。故事的主人公叫做John Johnson(姑且叫他“逊哥”),他在2018年加入SpaceX。当时的逊哥已经58岁,但在光学工程领域可谓颇有建树。刚…

Java---数据库---MyBatisPlus

MyBatisPlus1,MyBatisPlus入门案例与简介1.1 入门案例步骤1:创建数据库及表步骤2:创建SpringBoot工程步骤3:勾选配置使用技术步骤4:pom.xml补全依赖步骤5:添加MP的相关配置信息步骤6:根据数据库表创建实体类步骤7:创建Dao接口步骤8:编写引导类步骤9:编写测试类1.2 M…

Java项目:ssm图书馆管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 功能介绍 基于ssm的图书馆管理系统.主要功能包括:图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 用户分为…

ArrayList源码阅读笔记

1. 基础知识 1.1 概念 ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类。该类封装了一个动态再分配的Object[]数组,每个对象都有一个capacity属性,表示它们所封装的Object[]数组长度,当向ArrayList中添加元素…

DAMOYOLO windows 单卡训练

最近达摩院放出了目前最能打的yolo算法,时间和精度都得到了提升 目前代码已经开源: 代码地址:GitHub - tinyvision/DAMO-YOLO: DAMO-YOLO: a fast and accurate object detection method with some new techs, including NAS backbones, effi…

详细的科技特长生路径和成长规划

2021年,教育部印发了《关于进一步加强和改进普通高等学校艺术类专业考试招生工作的指导意见》,在其中规范了艺术类专业的招生政策,包括艺术类考试和高水平艺术团考试,其中明确自2024年起,高校高水平艺术团不再从高校招…

今年双十二值得买的数码好物推荐!双十二数码产品抢购攻略

时间过得真快,一年一度的双十二年终最后的大促即将正式拉开序幕。此刻,不知道大家制定好购物计划了吗?如果你想入手数码好物,那么不妨看一下我刚刚整理的这份清单,涵盖了手机、平板、耳机等多个品类,相信总…

Centos Linux 7 查看网卡

Centos Linux 7 查看网卡 一. 二.

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learne…

设计模型之单例设计

前言 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被…