【Linux】gdb_进程概念

ops/2025/1/18 16:38:27/

📢博客主页:https://blog.csdn.net/2301_779549673
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 📢前言
  • 🏳️‍🌈预备
  • 🏳️‍🌈常见使用
  • 🏳️‍🌈常见技巧 - cgdb
  • 👥总结


📢前言

在 Linux 系统的广袤世界里,高效的程序调试与对进程概念的深刻理解,宛如鸟之双翼、车两轮,是开发者不可或缺的重要技能。GDB(GNU Debugger)作为一款强大的调试工具,犹如开发者手中的精密仪器,能够深入程序内部,精准定位问题所在。而进程概念则是理解 Linux 操作系统运行机制的核心,它关乎资源分配、任务调度等诸多关键环节。本文将引领大家深入探索 GDB 调试工具与进程概念,通过丰富的实例和详细的解析,助力大家掌握这两项重要技能。


🏳️‍🌈预备

  • 程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程序,默认是 release 模式。

  • 要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项,如果没有添加,程序⽆法被编译

$ gcc mycmd.c -o mycmd # 默认模式,不⽀持调试
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=82f5cbaada10a9987d9f325384861a88d278b160, for GNU/Linux
3.2.0, not stripped
$ gcc mycmd.c -o mycmd -g # debug模式
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=3d5a2317809ef86c7827e9199cfefa622e3c187f, for GNU/Linux
3.2.0, with debug_info, not stripped

🏳️‍🌈常见使用

  • 开始: gdb File
  • 退出: ctrl + d 或 quit 调试命令
    在这里插入图片描述
    在这里插入图片描述

这是要用到的两个文件,执行生成 myexe 文件,然后用 gdb 调试

[wzy@VM-20-5-centos lesson11]$ cat code.c
#include <stdio.h>int Sum(int s, int e){int sum = 0;int i = s;for(; i <= e; ++i){sum += i;}return sum;
}int main(){printf("process is running\n");int start = 1;int end = 100;int result = Sum(start, end);printf("process has done, result: %d\n", result);
}
[wzy@VM-20-5-centos lesson11]$ cat Makefile
myexe:code.cgcc -o $@ $^ -g.PHONY:clean
clean:rm -f myexe
[wzy@VM-20-5-centos lesson11]$ ll
total 20
-rw-rw-r-- 1 wzy wzy  324 Jan 17 15:54 code.c
-rw-rw-r-- 1 wzy wzy   64 Jan 17 16:02 Makefile
-rwxrwxr-x 1 wzy wzy 9688 Jan 17 16:02 myexe
  • l + 数字:查看当前文件中以想要查找的行为中间行的上下10行
    在这里插入图片描述
  • l + 字符:效果同上
    在这里插入图片描述
  • 回车:gdb会记录最近的一条命令,直接回车会继续执行
    在这里插入图片描述
  • b + 数字:在指定行添加断点,若当前行没有数据,会提示
  • info b:显示当前有哪些断点
    在这里插入图片描述
  • d + 数字:删除指定序号的断点
    在这里插入图片描述

🏳️‍🌈常见技巧 - cgdb

先需要安装一下 cgdb - sudo tum install -y cgdb

cgdb的用法和gdb如出一辙,但是多了一个可视化界面,能够在调试的同时观察代码

cgdb myexe

在这里插入图片描述


👥总结

本篇博文对 gdb_进程概念 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

请添加图片描述


http://www.ppmy.cn/ops/151138.html

相关文章

基于微信小程序的电子点菜系统设计与实现(KLW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

算法练习——链表

一&#xff1a;两数相加 题目要求&#xff1a; 解题思路&#xff1a; 思路&#xff1a;注意进位即可 实现代码&#xff1a; ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* cur1 l1, * cur2 l2;ListNode* phead new ListNode(0);ListNode* cur phead;in…

【概率论与数理统计】第三章 多维随机变量及其分布(2)

定义7&#xff1a;若二维连续型随机变量 ( X , Y ) (X,Y) (X,Y)的概率密度为&#xff1a; f ( x , y ) 1 2 π σ 1 σ 2 1 − ρ 2 e − 1 2 ( 1 − ρ 2 ) [ ( x − μ 1 ) 2 σ 1 2 − 2 ρ ( x − μ 1 ) ( y − μ 2 ) σ 1 σ 2 ( y − μ 2 ) 2 σ 2 2 ] f(x,y) \fra…

夜天之书 #105 开源孪生:商业开源的模式实践

最近一个多月没有发布新的文章&#xff0c;我把时间大多投入在实践验证自己在多次演讲中都描绘过的开源孪生模式上。 开源孪生模式 本文展开介绍上图提及的各个具体实践&#xff0c;并说明这一模式如何可持续发展。 商业软件无需开源 《大教堂与集市》一书收录了 Eric Raymond …

C++ 搭建一个双向多线程的GRPC通信服务框架

文章目录 功能点服务端客户端服务端线程客户端线程心跳机制服务创建总结 功能点 双向通信&#xff1a;即指程序既有客服端又有服务端&#xff0c;以处理复杂的需求客户端信息线程处理&#xff1a;程序客户端发出某个请求后&#xff0c;应开辟其他线程处理&#xff0c;防止等待…

MarsCode青训营打卡Day1(2025年1月14日)|稀土掘金-16.最大矩形面积问题

资源引用&#xff1a; 最大矩形面积问题 - MarsCode 打卡小记录&#xff1a; 今天是开营第一天&#xff0c;和小伙伴们组成了8人的团队&#xff0c;在接下来的数十天里相互监督&#xff0c;打卡刷题&#xff01; 稀土掘金-16.最大矩形面积问题&#xff08;16.最大矩形面积问题…

jenkins-node节点配置

一.简述&#xff1a; Jenkins有一个很强大的功能&#xff1a; 即&#xff1a;支持分布式构建(jenkins配置中叫节点(node),也被称为slave)。分布式构建通常是用来吸收额外的负载。通过动态添加额外的机器应对构建作业中的高峰期&#xff0c;或在特定操作系统或环境运行特定的构建…

【PromptCoder + v0.dev】:前端开发的智能加速器

【PromptCoder v0.dev】&#xff1a;前端开发的智能加速器 在当今快节奏的软件开发环境中&#xff0c;前端开发者面临着将设计稿快速转化为可运行代码的巨大挑战。每一个像素的完美呈现都需要精确的代码编写&#xff0c;这不仅耗时&#xff0c;而且容易出错。幸运的是&#x…