【面试题】Linux下的GDB(第二篇)

1.GDB是什么?其主要功能有哪些?

GDB是GNU开源组织发布的一个强大的Unix/Linux下的程序调试工具。其主要功能包括:

  1. 启动用户程序后,可以按照用户的要求随意运行程序。

  2. 可让被调试的程序在用户所设定的断点处停住。

  3. 当程序被停住时,可以检查或者说监视此时程序中的数值。

  4. 可以修改被调试程序中的错误,并将修正后的程序继续执行。

2. 简述GDB的基本操作。

GDB的基本操作主要包括:

  1. 启动:通过gdb [可执行文件名]启动GDB,并加载要调试的程序。

  2. 设置断点:使用b [行号]b [函数名]在指定行或函数处设置断点。

  3. 查看断点:使用info b查看已设置的断点信息。

  4. 删除断点:使用d [断点编号]删除指定编号的断点。

  5. 运行:使用rrun命令开始运行程序,程序运行到断点的位置会停下来。

  6. 查看源代码:使用llist命令查看源代码。

  7. 逐过程执行:使用nnext命令逐过程执行代码,即一行一行地执行,但不进入函数内部。

  8. 逐语句执行:使用sstep命令逐语句执行代码,包括进入函数内部。

  9. 监视变量:使用watch [变量名]命令监视变量的值,当变量值发生变化时,GDB会自动停止程序。

  10. 退出GDB:使用qquit命令退出GDB。

3.如何使用GDB调试多线程程序?

调试多线程程序时,GDB提供了以下功能:

  1. 查看线程列表:使用info threads命令查看当前进程的线程列表。

  2. 切换线程:使用thread [线程编号]命令切换到指定编号的线程。

  3. 设置调度器锁定:使用set scheduler-locking命令设置调度器锁定模式,以便在调试时控制其他线程的执行。常见的锁定模式有off(不锁定任何线程)、on(只有当前线程可以运行)和step(当单步调试某一个线程时,保证在调试过程中当前线程不会发生改变,其他线程也会随着被调试线程的单步执行而单步执行)。

  4. 调试技巧:在调试多线程程序时,需要特别注意线程间的同步和通信机制,以及避免竞态条件等问题。可以使用GDB的断点、监视点等功能来跟踪和调试线程的执行过程。

4.GDB如何调试coredump文件?

当程序崩溃时,操作系统可能会生成一个coredump文件(核心转储文件),该文件包含了程序崩溃时的内存映像和寄存器状态等信息。可以使用GDB来调试coredump文件以分析崩溃原因。具体步骤如下:

  1. 生成coredump文件:在Linux系统中,可以通过设置ulimit -c unlimited命令来允许生成coredump文件。当程序崩溃时,会在程序所在目录下生成一个名为corecore.[pid]的文件。

  2. 加载coredump文件:使用gdb [可执行文件名] [coredump文件名]命令加载coredump文件。GDB会自动加载可执行文件和coredump文件,并停留在程序崩溃时的位置。

  3. 查看调用堆栈:使用btbacktrace命令查看崩溃时的函数调用堆栈信息。通过分析调用堆栈可以确定导致崩溃的函数和代码位置。

  4. 分析崩溃原因:根据调用堆栈信息和源代码分析崩溃原因。可能是数组越界、空指针引用、内存泄漏等问题导致的。根据分析结果进行修复并重新测试程序。

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

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

相关文章

【Web服务与Web应用开发】【C#】创建第一个简单的WCF服务应用程序 WCF Service Application(图文详情)

目录 0.简介 1.环境 2.知识点 3.详细过程 1)打开 Visual Studio 2019 ,下载所需插件 2)创建WCF服务应用项目 3)打开 【IService1.cs 】在此处定义服务函数 4)打开 【Service1.svc.cs】实现服务函数 5&#x…

linux的vim最全教程

基础概念 模式:Vim有多种模式,主要为命令模式(Normal mode)、插入模式(Insert mode)、可视模式(Visual mode)、末行模式(Command-line mode)等。默认启动时处于命令模式。 进入与退出: 启动:在终端输入vim [filename]或vi [filen…

LINUX centos 安装jenkins超超超超超超级详细步骤

Jenkins安装 配置jdkmavengit jenkins 拉取 配置 jdk 1.安装jdk8 yum install java-1.8.0-openjdk-devel2.检查版本 java -version出现如下图查看版本信息 3. 设置JAVA_HOME环境变量 vim /etc/profile最下方输入 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk expor…

在 Vue 中调用方法传入值,并在方法执行期间修改传入的值,是否会影响方法内部的值,取决于传入值的类型

在 Vue 中调用方法传入值,并在方法执行期间修改传入的值,是否会影响方法内部的值,取决于传入值的类型 一、前言1. 传入基本类型值(如数字、字符串)2.传入引用类型值(如对象、数组) 一、前言 在…

Qt 实战(6)事件 | 6.2、事件过滤器

文章目录 一、事件过滤器1、什么是事件过滤器?2、如何实现事件过滤器?3、应用示例4、总结 前言: 在Qt的事件处理机制中,事件过滤器(Event Filter)是一种非常强大且灵活的工具,它允许开发者在一个…

判断对象是否为空的多种方式

判断对象是否为空 网上也有许多方法,这里来整理一下 一、Object.keys(obj) ES6 写法: const data {}; const arr Object.keys(data); console.log(arr.length); // 0二、JSON.stringify() const obj {}; const arr JSON.stringify(obj); console.…

4.整合第三方技术【整合JUnit】

目录 1.创建项目: 2.导入测试对应的starter 3.添加测试对象 3.1 添加Prodcut接口文件 3.2 添加ProdcutImpl文件 3.3 测试类添加测试文件,并开始测试 4.测试类文件解析 4.1.测试类使用SpringBootTest修饰 4.2使用自动装配的形式添加要测试的对象 1.…

【PromptCC】遥感图像变化字幕的解耦范式

摘要 以往的方法忽略了任务的显著特异性:对于不变和变化的图像对,RSICC难度是不同的,以一种耦合的方式处理未变化和变化的图像对,这通常会导致变化字幕的混淆。论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp…

Linux 在文件内读取时间段字符串并解析判断当前时间是否在时间段内 C语言

最近需要实现一个判断当前是否是上班时间段内,但是需要从文件中读取特定的格式时间时间段 格式: 00:00-12:34|13:56-15:00(不确定几个时间段,每个时间段以|分隔) 读取特定格式时间并转化不难但是挺麻烦的 //获得当前中国时区时间 void getNowTime(char* bufTime,int bufTime…

ubuntu bin目录

ubuntu bin目录 在Ubuntu以及其他Unix和Linux系统中,bin目录扮演着非常重要的角色。这个名字bin来自“binary”的缩写,意味着这些目录包含二进制可执行文件,即那些编译过的程序,用户和系统可以直接运行这些程序。 不同类型的bin…

Trip.com 如何从 Elasticsearch 迁移到 ClickHouse 并构建了 50PB 的日志解决方案

本文字数:8721;估计阅读时间:22 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 在 Trip.com,我们为用户提供广泛的数字产品,包括酒店和机票预订、景点、旅游套餐、商务…

java创建0byte的空文件

在Java中,使用File类创建一个文件通常不会自动创建一个0字节的文件,它只是用来表示文件系统中的一个文件或目录。如果你想要创建一个0字节的文件,你需要使用FileOutputStream来写入文件。以下是创建一个0字节文件的示例代码: imp…

专业英语词汇(计算机)

purpose 目的 phase 阶段 investigate 调查 satisfy 满足 delivering 提供 交付 collaboration 协作 architecture 结构 storage 存储 enterprise 企业 extreme 极端 feedback 反馈 courage 勇气 effort 努力 essential 基本上 crisply 清晰的 precise 精确的 critical 关键 ap…

电脑复制按哪个键?还不会操作的赶紧来看!

当我们提到“电脑复制按哪个键”时,实际上是在讨论电脑键盘上用于执行复制操作的快捷键。复制功能在日常的电脑操作中极为常用,无论是文本编辑、文件处理还是图片操作,都离不开复制这一基本功能。以下,我们将深入探讨电脑复制操作…

【环境搭建】windows下MySQL8与5共存

目录 一、安装MySQL81.官网下载2.初始化mysql文件夹中my.ini文件3.初始化data文件夹,并记录初始密码4.安装服务,指定服务名称5.启动服务6.测试登录并修改密码 二、安装MySQL51.mysql5文件夹中初始化my.ini文件2.初始化data文件夹,并记录初始密…

GraphQL:简介

GraphQL 图片来源: 我们将探索GraphQL 的基础知识,并学习如何使用Apollo将其与 React 和 React Native 等前端框架连接起来。这将帮助您了解如何使用 GraphQL、React、React Native 和 Apollo 构建现代、高效的应用程序。 什么是 GraphQL?…

春秋云境:CVE-2022-25411[漏洞复现]

根据题目提示和CNNVD优先寻找后台管理地址 靶机启动后,使用AWVS进行扫描查看网站结构 在这里可以看到后台管理的登录地址:/admin/,根据题目提示可知是弱口令 尝试admin、123456、admin666、admin123、admin888...等等常见弱口令 正确的账户…

Linux Vim最全面教程

Vim 是一款功能强大的文本编辑器,常用于 Linux 系统中。以下是一份 Vim 最全面教程: 三种模式: 命令模式:可以进行删除、复制、粘贴等快捷操作,按esc键可以返回到命令模式;编辑模式:可以编辑文件…

地理空间数据格式GeoJSON扫盲,在CesiumJS中如何加载。

Hi,我是贝格前端工场,GIS已经越来越多的应用在可视化大屏中了,开发GIS类应用就少不了地理空间数据,本文介绍一下数据GeoJSON数据格式。 一、什么是GeoJSON数据格式,在GIS开发中有什么作用 GeoJSON是一种基于JSON&…

【MySQL】数据库——备份与恢复,日志管理1

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中,数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因: 程序错误人为,操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 2.数据库备份…