Git与GDB以及进程:高效开发与调试指南
一.git1.常用指令1.git clone 仓库地址2.git status 查看git仓库的状态3.git add 文件 将文件传入到仓库的暂存区4.git commit -m 日志 正式的提交文件5.git push 将本地仓库的内容同步到远端6.在.gitignore中添加文件后缀可以不添加该后缀的文件7.git pull 同步远端仓库和本地仓库二.gdbgdb是Linux中常用的调试软件。只有当可执行文件为debug版本下才可以进行调试。我们正常使用gcc编译时生成的是release版本。想要变为debug需要在gcc的末尾加一个-g。命令作⽤样例list/l显⽰源代码从上次位置开始每次列出10⾏list/l 10list/l 函数名列出指定函数的源代码list/l mainlist/l ⽂件名:⾏号列出指定⽂件的源代码list/l mycmd.c:1r/run从程序开始连续执⾏runn/next单步执⾏不进⼊函数内部 逐过程 F10nexts/step单步执⾏进⼊函数内部, 逐语句 F11stepbreak/b[⽂件名:]⾏号在指定⾏号设置断点break 10break test.c:10break/b 函数名在函数开头设置断点break maininfo break/b查看当前所有断点的信息info breakfinish执⾏到当前函数返回然后停⽌finishprint/p表达式打印表达式的值print startendp 变量打印指定变量的值p xset var变量值修改变量的值set var i10continue/c从当前位置开始连续执⾏程序continuedelete/dbreakpoints删除所有断点delete breakpointsdelete/dbreakpoints n删除序号为n的断点delete breakpoints 1disable breakpoints禁⽤所有断点disable breakpointsenable breakpoints启⽤所有断点enable breakpointsinfo/i breakpoints查看当前设置的断点列表info breakpointsdisplay变量名跟踪显⽰指定变量的值每次停⽌时display xundisplay编号取消对指定编号的变量的跟踪显⽰undisplay 1until X⾏号执⾏到指定⾏号until 20backtrace/bt查看当前执⾏栈的各级函数调⽤及参数backtraceinfo/i locals查看当前栈帧的局部变量值info localsquit退出GDB调试器quitr/run运行程序遇到断点停止r三.进程1.进程的概念课本概念程序的⼀个执⾏实例正在执⾏的程序等内核观点担当分配系统资源CPU时间内存的实体。当前进程 内核数据结构(task_struct) ⾃⼰的程序代码和数据进程信息被放在⼀个叫做进程控制块的数据结构中可以理解为进程属性的集合。课本上称之为PCBprocess control blockLinux操作系统下的PCB是:task_struct在Linux中描述进程的结构体叫做task_struct。task_struct是Linux内核的⼀种数据结构类型它会被装载到RAM(内存)⾥并且包含着进程的信息。2.进程相关的代码1.查看某文件的进程状态ps ajx | grep test在所有进程中搜索包含 test 的行ps ajx | head -1显示进程的第一行信息2.getpid:获得该进程的id3.getppid获得该进程父进程的id4.fork在一个进程中打开一个子进程。5../code 可以把进程在后台上运行6.echo $?获得僵尸进程的结果码7.top可以更改进程的NI值NI值的范围在[-20,19]8.exit数字在C语言中使用直接结束进程并返回进程码9.putenv(需要导入的环境变量)3.进程的运行队列以及切换调度操作系统在执行进程的时候并不是单一的执行一个单进程。大部分的电脑为多核单CPU的配置。这时为了能够执行多个进程CPU就不得不进行并行和并发。并行多个进程在多个CPU下分别同时进⾏运⾏这称之为并⾏。并发多个进程在⼀个CPU下采⽤进程切换的⽅式在⼀段时间之内让多个进程都得以推进称之为并发。那么在执行并发时操作系统是怎么去选择要进行的进程呢原因是在操作系统中有关于进程·状态的一个结构体一般来说被称为PCBtask_struct。而CPU在进行调度时有一个调度器runqueue。runqueue像一个队列一样连接着多个PCB当一个PCB执行完之后继续去排队一直连续的进行称为并发。这样的调度方法叫FIFO调度。不过这种调度方法并不能体现出PCB中的优先级所以在很早之前就被淘汰了。四.环境变量和本地变量环境变量(environment variables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数如我们在编写C/C代码的时候在链接的时候从来不知道我们的所链接的动态静态库在哪⾥但是照样可以链接成功⽣成可执⾏程序原因就是有相关环境变量帮助编译器进⾏查找。环境变量通常具有某些特殊⽤途还有在系统当中通常具有全局特性‘1.echo $NAME: 显⽰某个环境变量值2.export: 设置⼀个新的环境变量3.env: 显⽰所有环境变量4.unset: 清除环境变量5.set: 显⽰本地定义的shell变量和环境变量本地变量是shell自己设置的变量以及用户设定的变量。在命令行输入a100等指令会将该命令传入本地变量中。常见的环境变量PATH : 指定命令的搜索路径HOME : 指定⽤⼾的主⼯作⽬录(即⽤⼾登陆到Linux系统中时,默认的⽬录)SHELL : 当前Shell,它的值通常是/bin/bash。环境变量是可以被子进程继承下去的但是本地变量不可以。1.getenv环境变量名称可以获得环境变量2.environ一个类型为char**的指针指向环境变量表的首地址environ[i]可以一次获得环境变量的值。基于这一些操作我们可以通过环境变量来让各个进程之间来同步数据。五.进程地址空间当我们使用fork去执行父子进程的时候当我们打印出一个全局变量的地址时运行代码我们可以发现他们的全局变量的地址是一样的但是当全局变量只在子进程中进行改变时。父进程中的全局变量并没有改变。但是我们之前在C语言中学到同一块区间管理的一定是一个数据。那么为什么会不一样呢这是因为在进程运行中数据所占用的地址并不是一个物理地址而是虚拟地址线性地址之前在学习C语言和C时我们会遇到这个图但是这3并不是一个程序地址。这其实是一个进程地址空间。其实在test_struct中有一个关于进程地址空间的地址指针指向这个表称为mm_struct当需要调用物理内存时通过进程地址空间来进行申请。

相关新闻

tcl - apply

tcl - apply

目录 一、apply 命令核心定位 二、apply 命令语法 & 核心原理 1. 基础语法 关键参数拆解 核心原理 2. 函数定义列表(func)的细节 三、apply 命令基础示例(快速上手) 示例 1:最简单的匿名函数调用 示例 2&…

2026/7/6 9:17:30 阅读更多 →
12 | 别让你的核心代码去当“保安”:给对象请个专业秘书——代理模式

12 | 别让你的核心代码去当“保安”:给对象请个专业秘书——代理模式

我前段时间帮一个朋友排查 Bug,发现他的业务代码里塞满了各种“杂活儿”。 比如一个负责“修改用户信息”的函数,里面居然还写了权限校验、操作日志,甚至还有一段防止重复提交的逻辑。 那个函数原本只有 5 行核心代码,结果被这些杂…

2026/7/5 9:56:30 阅读更多 →
JoyAI    LeetCode.335.路径交叉  public boolean isSelfCrossing(int[] distance)

JoyAI LeetCode.335.路径交叉 public boolean isSelfCrossing(int[] distance)

这道题是 LeetCode 335题“路径交叉”,要求判断一个移动路径是否会自相交。给你一个整数数组 distance,表示移动的距离序列,移动方向依次为北、西、南、东,循环进行。我们需要判断路径是否会交叉。 解题思路 路径交叉的情况可以分…

2026/7/5 22:03:40 阅读更多 →

最新新闻

Instatic插件权限审计:安全合规检查完全指南

Instatic插件权限审计:安全合规检查完全指南

Instatic插件权限审计:安全合规检查完全指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为现代化的自托管可视化CMS&…

2026/7/6 19:35:01 阅读更多 →
nest_asyncio 性能优化指南:如何避免嵌套事件循环的性能陷阱

nest_asyncio 性能优化指南:如何避免嵌套事件循环的性能陷阱

nest_asyncio 性能优化指南:如何避免嵌套事件循环的性能陷阱 【免费下载链接】nest_asyncio Patch asyncio to allow nested event loops 项目地址: https://gitcode.com/gh_mirrors/ne/nest_asyncio 在Python异步编程的世界中,nest_asyncio是一个…

2026/7/6 19:29:00 阅读更多 →
Hermes Agent完整实战指南:AI代理系统的深度配置与应用

Hermes Agent完整实战指南:AI代理系统的深度配置与应用

Hermes Agent完整实战指南:AI代理系统的深度配置与应用 【免费下载链接】hermes-agent The agent that grows with you 项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent Hermes Agent是一款功能强大的AI代理系统,它能够随着用户需…

2026/7/6 19:26:59 阅读更多 →
ReForum:构建现代化React-Redux论坛应用的终极指南

ReForum:构建现代化React-Redux论坛应用的终极指南

ReForum:构建现代化React-Redux论坛应用的终极指南 【免费下载链接】ReForum A minimal forum board application. Built on top of React-Redux frontend, ExpressJS-NodeJS backend (with PassportJS for OAuth) and MongoDB databse. 项目地址: https://gitcod…

2026/7/6 19:26:59 阅读更多 →
ReForum深度解析:React-Redux与ExpressJS的完美融合架构

ReForum深度解析:React-Redux与ExpressJS的完美融合架构

ReForum深度解析:React-Redux与ExpressJS的完美融合架构 【免费下载链接】ReForum A minimal forum board application. Built on top of React-Redux frontend, ExpressJS-NodeJS backend (with PassportJS for OAuth) and MongoDB databse. 项目地址: https://g…

2026/7/6 19:20:56 阅读更多 →
Discordia迭代器系统:Cache、WeakCache与FilteredIterable深度解析

Discordia迭代器系统:Cache、WeakCache与FilteredIterable深度解析

Discordia迭代器系统:Cache、WeakCache与FilteredIterable深度解析 【免费下载链接】Discordia Discord API library written in Lua for the Luvit runtime environment 项目地址: https://gitcode.com/gh_mirrors/di/Discordia Discordia是基于Luvit运行环…

2026/7/6 19:20:56 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻