GDB调试的基本使用、GDB调试多进程

news2024/9/20 1:08:36

1. 编译时加选项-g,生成具有调试信息的程序

gcc -g test.c -o test

2. 启动GDB

(1)启动GDB:

gdb test

(2)设置运行时参数:(主函数中可接收运行时参数)

set args  // 设置运行时参数,如set args 10 20 30
show args // 查看设置的运行时参数

(3)启动程序

run      // 执行程序,若有断点,则停在第一个断点处;简写为r
start    // 程序向下执行一行
continue // 执行到第一个断点处

3. 显示源码

list 或 l       // 显示当前行后面的源代码(默认总共显示10行)
list-           // 显示当前行前面的源代码(默认总共显示10行)
list n          // 显示第n行前后的源代码
list func       // 显示func函数的源代码
set listsize n  // 设置一次显示n行
show listsize   // 查看一次显示行数

4. 断点操作

(1)简单断点:使用b或break命令

b n    // 在第n行设置断点
b func // 在func函数入口处设置断点
info b // 显示所有断点,可简写为 i b

(2)多文件断点,假设程序有add.cpp和test.cpp两个文件

b add.cpp:n                  // 在add.cpp源文件第n行设置断点
b add.cpp:func               // 在add.cpp源文件func函数入口处设置断点
b Animal::func               // 在Animal类的func函数入口处设置断点
b Animal::doSth(int, double) // 有函数重载时,必须指定函数形参的情况
b MyNamespace::Animal::func  // 在NyNamespace的Animal类的func函数入口处设置断点

(3)条件断点:为断点设置条件

b test.c:8 if Value == 5
// test.c第8行,Value为5时就停止
// 若为循环,不能停在for语句,要停在循环体中

 (4)维护断点

delete 10-12 // 删除编号为10、11、12的断点,delete可以简写为d
disable n    //禁用编号为n的断点
enable n     //启用编号为n的断点

5. 调试程序

run      // 执行程序,若有断点,则停在第一个断点处,简写为r
next     // 单步跟踪。函数调用当做一条语句直接执行,简写为n
step     // 单步跟踪。函数调用则进入函数体内,简写为s
finish   // 退出进入的函数
until    // 在循环体内单步跟踪时,执行完循环体并退出,简写为c
continue // 继续执行程序,停在下一个断点处
quit     // 退出gdb,简写为q

6. 查看数据

查看运行时变量、字符串、表达式等的值:

print a  // 查看a的值,print可简写为p

7. 自动查看

自己设置需要查看的值,程序停住或单步跟踪时,会自动显示需要查看的值:

display i         // 设置自动显示i的值
info display      // 查看所有被设置为display的变量
undisplay n       // 不显示编号为n的display设置
delete display n  // 删除编号为n的display设置
disable display n // 禁用编号为n的display设置
enable display n  // 启用编号为n的display设置

8. 查看修改变量的类型、值

ptype i          // 查看变量i的类型
p i              // 查看变量i的值
set var i = 100  // 设置变量i的值为100

 9. GDB调试多进程

 有如下的多进程程序,需要使用GDB分别调试父子进程:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>

int main(int argc, const char* argv[]) {
    pid_t pid = -1;
    int status = 0;
    int ret = -1;

    pid = fork();
    if (-1 == pid) {
        perror("fork");
        return 1;
    }

    if (pid > 0) {
        // 父进程
        printf("父进程说太强了");
        printf("父进程笑尿了");
        printf("父进程哈哈哈哈哈");
    } else {
        // 子进程
        printf("子进程说太强了");
        printf("子进程笑尿了");
        printf("子进程哈哈哈哈哈");
        exit(0);
    }

    
    ret = wait(&status); // 父进程等待回收子进程资源
    if(-1 == ret) {
        perror("wait");
        return 1;
    }

    return 0;
}

GDB调试默认跟踪父进程,如下:

如何跟踪子进程呢?

在fork函数调用之前设置跟踪子进程:

set follow-fork-mode child

然后就会跟踪子进程,如下:

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

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

相关文章

设计模式实现之state模式

状态模式的定义&#xff1a;Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.&#xff08;当一个对象在状态改变时允许其改变行为&#xff0c;这个对象看起来像其改变了其类&#xff09;。 一个对象可以…

KVM Bridge 配置

目录 Bridge方式原理 网桥方式配置步骤 1、编辑修改网络设备脚本文件&#xff0c;增加网桥设备br0 2、编辑修改网络设备脚本文件&#xff0c;修改网卡设备ens33 3、重启宿主机查看配置 虚拟机配置 Bridge方式原理 如上图&#xff0c;网桥的基本原理就是创建一个网桥并将…

IOC使用Spring实现附实例详解

目录 一、相关导读 1. Maven系列专栏文章 2. Mybatis系列专栏文章 3. Spring系列专栏文章 二、前言 Spring简介 Spring体系结构 三、Spring实现IOC 1. 创建Maven工程&#xff0c;引入对应依赖 2. 创建实体类&#xff0c;Dao接口及实现类 3. 编写xml配置文件 4. 测试…

【翻译一下官方文档】之uniapp基础内容

目录 表单控件绑定 v-model v-model结合表单 easycom组件规范 传值 prop emit 表单控件绑定 v-model 你可以用 v-model 指令在表单 input、textarea 及 select 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇&#xff0c;但 v-mo…

如何高效提高倾斜摄影三维模型顶层合并的技术方法分析

如何高效提高倾斜摄影三维模型顶层合并的技术方法分析 1、倾斜摄影三维模型顶层合并 1.1倾斜摄影三维模型是一种基于倾斜摄影技术&#xff0c;通过多个角度拍摄同一区域的影像&#xff0c;利用计算机图像处理和三维重建技术生成的三维地理信息数据。由于一个大区域可能需要多块…

智能家居代码架构---简单工厂模式

(11条消息) 智能家居 (10) ——人脸识别祥云平台编程使用(编译libcurl库支持SSL&#xff0c;安装SSL依赖库libssl、libcrypto)openssl 依赖库行稳方能走远的博客-CSDN博客 看上面这个博客的往期文章 代码设计经验的总结&#xff0c;稳定&#xff0c;拓展性更强。一系列编程思…

倾斜摄影三维模型格式转换OSGB 到3Dtitles 实现的常用技术方法

倾斜摄影三维模型格式转换OSGB 到3Dtitles 实现的常用技术方法 倾斜摄影三维模型是一种用于建立真实世界三维场景的技术&#xff0c;常用于城市规划、土地管理、文化遗产保护等领域。在倾斜摄影模型中&#xff0c;OSGB格式和3Dtiles格式都是常见的数据格式。其中&#xff0c;OS…

IJKPLAYER源码分析-主结构

前言 本文主要分析IJKPLAYER源码软解主流程&#xff0c;硬解将另起一篇分析。所用IJKPLAYER版本号&#xff1a; #define IJKPLAYER_VERSION "f0.7.17-28-gd7040f97" 主结构 IJKPLAYER播放器的解协议、解复用、解码、音视频同步与显示播放&#xff0c;以及主要线程等…

智能家居项目整合(网络控制线程、语音控制线程,火灾报警线程)

mainPro.c&#xff08;主函数&#xff09; #include <stdio.h> #include <string.h> #include "contrlEquipments.h" #include "inputCommand.h" #include <pthread.h> #include <unistd.h>struct Equipment *findEquipByName(ch…

人工智能在医疗保健中的应用与创新

引言 随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;逐渐在各个领域展现出巨大的潜力&#xff0c;特别是在医疗保健行业。人工智能技术的引入为医疗保健领域带来了创新的诊断和治疗方法&#xff0c;提高了病患的生活质量和医疗保健效率。本文将探讨人工智…

倾斜摄影三维模型轻量化过程中遇到的常见问题分析,如何处理这些问题?

倾斜摄影三维模型轻量化过程中遇到的常见问题分析&#xff0c;如何处理这些问题&#xff1f; 在倾斜摄影超大场景的三维模型轻量化过程中&#xff0c;常见的问题包括&#xff1a; 1、精度损失。为了减小数据文件大小&#xff0c;轻量化处理可能会破坏原始数据的精度&#xff0…

数字未来:世界正走向新的“破茧时刻”

著名科学史专家亚历山大柯瓦雷&#xff0c;在《从封闭世界到无限宇宙》展示了一段非常神奇的历史现象&#xff1a;人类从笃信自己生活在一个封闭空间&#xff0c;到认识浩瀚无垠的宇宙&#xff0c;其实并没有耗费很长时间。自1543年哥白尼发布《天体运行论》&#xff0c;到牛顿…

基于深度学习和生理信号的疾病筛查:个体内和个体间研究的价值与应用

一、引言 随着深度学习技术的飞速发展&#xff0c;基于生理信号的疾病筛查和诊断方法在医学领域得到了广泛应用。这些方法通常利用个体内和个体间的生理信号数据&#xff0c;通过训练深度学习模型实现疾病的自动识别和预测。本文将讨论个体内和个体间研究在这一领域的价值和应…

Windows下virtualbox相关软件安装设置全过程

一、下载 virtual box 程序 virtual box扩展程序-Oracle_VM_VirtualBox_Extension_Pack-7.0.8.vbox-extpack Virtualbox GuestAdditions 程序-解决分辨率&#xff0c;主机虚拟机之间共享文件、剪贴板等问题 http://download.virtualbox.org/virtualbox/7.0.8/ 或者 virtual b…

倾斜摄影三维模型转换3DTILTES格式遇到的常见问题

倾斜摄影三维模型转换3DTILTES格式遇到的常见问题 将倾斜摄影三维模型从OSGB格式转换为3DTILES格式时&#xff0c;常见的问题包括&#xff1a; 1、3D Tiles生成时间较长&#xff1a;由于3D Tiles是一种高效的地理数据存储格式&#xff0c;能够支持海量的空间数据呈现和查询&am…

【LeetCode: 5. 最长回文子串 | 暴力递归=>记忆化搜索=>动态规划 => 中心扩展法】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

可以一学的代码优化小技巧:减少if-else冗余

前言 if-else 语句对于程序员来说&#xff0c;是非常非常熟悉的一个判断语句&#xff0c;我们在日常开发和学习中都经常看见它&#xff0c;if-else语句主要用于需要做出选择的地方进行判断&#xff0c;这里就不再赘述if-else语法和特点了。 ​ 我们在写代码&#xff08;如图下…

vue---组件逻辑复用方法:Mixin/HOC/Renderless组件

目录 1、Mixin 2、HOC 3、Renderless组件 下文通过表单校验来分别讲解Mixin/HOC/Renderless组件这三种方式。 1、Mixin 通过mixin将一个公用的validate函数同步到每一个组件中去 mixin使用详细介绍见&#xff1a;vue---mixin混入_maidu_xbd的博客-CSDN博客一个混入对象可…

优化Dynamics 365建议

传统上&#xff0c;旧版 Web 客户端需要某些扩展&#xff08;如功能区规则&#xff09;同步返回&#xff0c;这意味着开发人员在从远程源请求数据时被迫使用同步请求。在统一接口中&#xff0c;我们已采取措施确保支持异步通信。例如&#xff1a; 统一接口支持异步功能区规则评…

p67 内网安全-域横向 smbwmi 明文或 hash 传递

数据来源 知识点1&#xff1a; Windows2012以上版本默认关闭wdigest&#xff0c;攻击者无法从内存中获取明文密码 Windows2012以下版本如安装KB2871997补丁&#xff0c;同样也会导致无法获取明文密码 针对以上情况&#xff0c;我们提供了4种方式解决此类问题 利用哈希hash传递&…