当前位置: 首页 > news >正文

Linux调试器gdb和cgdb的使用【Ubuntu】

文章目录

  • 一、样例代码
  • 二、预备
  • 三、常见使用
    • 1、cgdb调试操作
    • 2、gdb调试操作
  • 四、常见技巧
    • 1、 **安装cgdb:**
    • 2、watch
    • 3、set var确定问题原因
    • 4、条件断点

一、样例代码

// mycmd.c
#include <stdio.h>int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;} return result;
} 
int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}

二、预备

• 程序的发布方式有两种, 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 binFile
  • 退出ctrl + dquit 调试命令

1、cgdb调试操作

按下ESC键进入代码窗口,此时可以上下浏览代码,并且可以进行一系列的操作:

按键操作
空格键设置或者取消断点;
o查看代码所在的文件;
/ 或者 ?在代码中搜索字符串;
-缩小代码窗口;
+扩大代码窗口;
gg光标移动到文件头部;
GG光标移动到文件尾部;
ctrl + b代码向上翻一页;
ctrl + u代码向上翻半页;
ctrl + f代码向下翻一页;
ctrl + d代码向下翻半页;

按下i键回到调试窗口,进入调试模式,使用的调试指令与GDB几乎一样!

2、gdb调试操作

命令作用样例
list/l显⽰源代码,从上次位置开始,每次列出list/l 10
list/l 函数名列出指定函数的源代码list/l main
list/l ⽂件名:行号列出指定⽂件的源代码list/l mycmd.c:1
r/run从程序开始连续执⾏run
n/next单步执行,不进⼊函数内部next
s/step单步执行,进⼊函数内部step
break/b [⽂件名:]行号在指定⾏号设置断点break 10 break test.c:10
break/b 函数名在函数开头设置断点break main
info break/b查看当前所有断点的信息info break
finish执⾏到当前函数返回,然后停⽌finish
print/p 表达式打印表达式的值print start+end
p 变量打印指定变量的值p x
set var 变量=值修改变量的值set var i=10
continue/c从当前位置开始连续执⾏程序continue
delete/d breakpoints删除所有断点delete breakpoints
delete/d breakpoints n删除序号为n的断点delete breakpoints 1
disable breakpoints禁⽤所有断点disable breakpoints
enable breakpoints启⽤所有断点enable breakpoints
info/i breakpoints查看当前设置的断点列表info breakpoints
display 变量名跟踪显⽰指定变量的值(每次停止时)display x
undisplay 编号取消对指定编号的变量的跟踪显示undisplay 1
until X⾏号执⾏到指定⾏号until 20
backtrace/bt查看当前执⾏栈的各级函数调⽤及参数backtrace
info/i locals查看当前栈帧的局部变量值info locals
quit退出GDB调试器quit
  • -断点(breakpoints) -行号(n)

四、常见技巧

📌

1、 安装cgdb:

• 上面的基本调试还是麻烦,虽然是黑屏,但是还是想看到代码调试
推荐安装cgdb:
• Ubuntu: sudo apt-get install -y cgdb
• Centos: sudo yum install -y cgdb

2、watch

执行时监视一个表达式(如变量)的值。如果监视的表达式在程序运行期间的值发生变化,GDB 会暂
停程序的执行,并通知使用者

(gdb) l main
11
12 			return result;
13 		}
14
15 		int main()
16 		{
17 		int start = 1;
18 		int end = 100;
19 		printf("I will begin\n");
20 		int n = Sum(start, end);
(gdb) b 20
Breakpoint 1 at 0x11c3: file mycmd.c, line 20.
(gdb) info b
Num	  Type	 	Disp	 Enb	 Address	 			What
1 	breakpoint  keep 	  y 	0x00000000000011c3 	in main at mycmd.c:20 
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:20
20 				int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:5
5 		{
(gdb) n
6 			int result = 0;
(gdb) watch result
Hardware watchpoint 2: result
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = -6896
New value = 0
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = 0
New value = 1
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = 1
New value = 3
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = 3
New value = 6
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 	0x00005555555551c3 	in main at mycmd.c:20breakpoint already hit 1 time
2 	hw watchpoint keep y resultbreakpoint already hit 4 times
(gdb) d 2
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 		What
1 	breakpoint 	keep 	y 	0x00005555555551c3 	in main at mycmd.c:20breakpoint already hit 1 time
(gdb) finish
Run till exit from #0 	Sum (s=1, e=100) at mycmd.c:7
0x00005555555551d2 in main () at mycmd.c:20
20 			int n = Sum(start, end);
Value returned is $1 = 5050

📌 注意:

  • 如果你有一些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如果变
    化了,就会通知你.

3、set var确定问题原因

更改一下标志位,假设我们想得到 +-result

// mycmd.c
#include <stdio.h>int flag = 0; // 故意错误
//int flag = -1;
//int flag = 1;int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;}return result*flag;
} int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}
(gdb) l main
15
16			return result*flag;
17 			}
18
19			 int main()
20 			{
21 				int start = 1;
22 				int end = 100;
23 				printf("I will begin\n");
24 				int n = Sum(start, end);
(gdb) b 24
Breakpoint 1 at 0x11ca: file mycmd.c, line 24.
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:24
24 				int n = Sum(start, end);
(gdb) n
25 				printf("running done, result is: [%d-%d]=%d\n", start, end,
n);
(gdb) n
running done, result is: [1-100]=0 # 这⾥结果为什么是026 				return 0;
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:24
24 				int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:9
9 		{
(gdb) n
10 			int result = 0;
(gdb) n
11 			for(int i = s; i <= e; i++)
(gdb)
13 				result += i;
(gdb)
11 			for(int i = s; i <= e; i++)
(gdb)
13 				result += i;
(gdb) until 14
Sum (s=1, e=100) at mycmd.c:16
16 			return result*flag;
(gdb) p result
$1 = 5050
(gdb) p flag
$2 = 0
(gdb) set var flag=1 	# 更改flag的值,确认是否是它的原因
(gdb) p flag
$3 = 1
(gdb) n
17 			}
(gdb) n
main () at mycmd.c:25
25 			printf("running done, result is: [%d-%d]=%d\n", start, end,
n);
(gdb) n
running done, result is: [1-100]=5050 # 是它的原因
26 				return 0;

4、条件断点

添加条件断点

(gdb) l main
11
12 			return result;
13 		}
14
15 		int main()
16 		{
17 			int start = 1;
18 			int end = 100;
19 			printf("I will begin\n");
20 			int n = Sum(start, end);
(gdb) b 20
Breakpoint 1 at 0x11c3: file mycmd.c, line 20.
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:20
20 				int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:5
5 		{
(gdb) n
6 			int result = 0;
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) n
9 				result += i;
(gdb) display i
1: i = 1
(gdb) n
7 			for(int i = s; i <= e; i++)
1: i = 1
(gdb) n
9 				result += i;
1: i = 2
(gdb) n
7 			for(int i = s; i <= e; i++)
1: i = 2
(gdb) n
9 				result += i;
1: i = 3
(gdb)
7 			for(int i = s; i <= e; i++)
1: i = 3
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 		0x00005555555551c3 	in main at mycmd.c:20breakpoint 	already hit 1 time
(gdb) b 9 if i == 30 	# 9是⾏号,表⽰新增断点的位置
Breakpoint 2 at 0x555555555186: file mycmd.c, line 9.
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 		0x00005555555551c3 	in main at mycmd.c:20breakpoint 	already hit 1 time
2 	breakpoint 	keep 	y 		0x0000555555555186 	in Sum at mycmd.c:9stop only if i == 30
(gdb) finish
Run till exit from #0 Sum (s=1, e=100) at mycmd.c:7Breakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
1: i = 30
(gdb) finish
Run till exit from #0 Sum (s=1, e=100) at mycmd.c:9
0x00005555555551d2 in main () at mycmd.c:20
20 				int n = Sum(start, end);
Value returned is $1 = 5050

给已经存在的端点新增条件

(gdb) l main
11
12 			return result;
13 		}
14
15 		int main()
16 		{
17 			int start = 1;
18 			int end = 100;
19 			printf("I will begin\n");
20 			int n = Sum(start, end);
(gdb) b 20
Breakpoint 1 at 0x11c3: file mycmd.c, line 20.
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:20
20 			int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:5
5 		{
(gdb) n
6 			int result = 0;
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) n
9 				result += i;
(gdb)
7 			for(int i = s; i <= e; i++)
(gdb)
9 				result += i;
(gdb)
7 			for(int i = s; i <= e; i++)
(gdb)
9 				result += i;
(gdb)
7 			for(int i = s; i <= e; i++)
(gdb) b 9 # 我们在第9⾏新增⼀个断点,⽤来开始测试
Breakpoint 2 at 0x555555555186: file mycmd.c, line 9.
(gdb) info b
Num Type 		Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 		0x00005555555551c3 	in main at mycmd.c:20breakpoint 	already hit 1 time
2 	breakpoint 	keep 	y	 	0x0000555555555186 	in Sum at mycmd.c:9
(gdb) nBreakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) nBreakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
(gdb) condition 2 i==30 #给2号断点,新增条件i==30
(gdb) info b
Num Type 		Disp 	Enb Address 			What
1 	breakpoint 	keep 	y 	0x00005555555551c3 	in main at mycmd.c:20breakpoint already hit 1 time
2 	breakpoint 	keep 	y 	0x0000555555555186 	in Sum at mycmd.c:9stop only if i==30breakpoint already hit 2 times
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) n
9 				result += i;
(gdb) c
Continuing.
Breakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
(gdb) p i
$1 = 30
(gdb) p result
$2 = 435

📌 注意:

  • 条件断点添加常见两种方式:1. 新增 2. 给已有断点追加
  • 注意两者的语法有区别,不要写错了。
  • 新增: b 行号/文件名:行号/函数名 if i == 30(条件)
  • 给已有断点追加:condition 2 i==30, 其中2是已有断点编号,没有if

相关文章:

Linux调试器gdb和cgdb的使用【Ubuntu】

文章目录 一、样例代码二、预备三、常见使用1、cgdb调试操作2、gdb调试操作 四、常见技巧1、 **安装cgdb:**2、watch3、set var确定问题原因4、条件断点 一、样例代码 // mycmd.c #include <stdio.h>int Sum(int s, int e) {int result 0;for(int i s; i < e; i){r…...

清华大学DeepSeek详细使用教程共6版免费下载

「清华北大-Deepseek使用手册」 链接&#xff1a;https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理&#xff09; 1&#xff0d;6版本链接&#xff1a;https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …...

使用黑森林实验室发布的Flux.1 文生图模型进行 UI 创作以及 PS 操作

我们前期介绍了黑森林实验室发布的 Flux.1 文生图大模型&#xff0c;其模型是一个扩散模型。扩散模型通过迭代细化噪声图像来生成最终图像。这种去噪过程使扩散模型能够创建更连贯、更逼真的图像&#xff0c;因为扩散是一个多步骤过程&#xff0c;这与 GAN&#xff08;生成对抗…...

React Native 0.78新特性

此版本在 React Native 中发布了 React 19,以及其他相关功能,例如对 Android Vector drawables 的原生支持以及对 iOS 的更好的 Brownfield 集成。 亮点 React 19 React 19 现在可在 React Native 上使用!React 19 需要更新您的应用,因为我们从 React 18 引入了一些更改…...

11.24 SpringMVC(1)@RequestMapping、@RestController、@RequestParam

一.RequestMapping("/user")//HTTP 请求方法既支持get也支持post&#xff0c;可表示为类路径与方法路径 二.RequestMapping(value "/m7", method {RequestMethod.POST, RequestMethod.GET}) value这个参数指定了请求的 URL 路径。method 参数指定了允许…...

webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果

前言 我们平时在前端网页修改好代码要点击刷新再去看修改的效果&#xff0c;这样比较麻烦&#xff0c;那么很多软件都提供了实时预览的功能&#xff0c;我们一边编辑代码一边可以看到效果。下面说的是webstorm。 1 Live Edit 首先我们需要在webstorm的settings里安装插件Live …...

ROS环境搭建

ROS首次搭建环境 注&#xff1a;以下内容都是在已经安装好ros的情况下如何搭建workplace 一、创建工作空间二、创建ROS包三、注意 注&#xff1a;以下内容都是在已经安装好ros的情况下如何搭建workplace 如果没有安装好&#xff0c;建议鱼香ros一步到位:鱼香ROS 我也是装了好久…...

Cherry Studio + 火山引擎 构建个人AI智能知识库

&#x1f349;在信息化时代&#xff0c;个人知识库的构建对于提高工作效率、知识管理和信息提取尤为重要。尤其是当这些知识库能结合人工智能来智能化地整理、分类和管理数据时&#xff0c;效果更为显著。我最近尝试通过 Cherry Studio 和 火山引擎 来搭建个人智能知识库&#…...

Spring Boot 与 MyBatis 版本兼容性

初接触Spring Boot&#xff0c;本次使用Spring Boot版本为3.4.3&#xff0c;mybatis的起步依赖版本为3.0.0&#xff0c;在启动时报错&#xff0c;报错代码如下 org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name userMapper…...

《 C++ 点滴漫谈: 二十九 》风格 vs. C++ 风格:类型转换的对决与取舍

摘要 类型转换是 C 编程中的重要机制&#xff0c;用于在不同数据类型之间进行安全高效的转换。本博客系统介绍了 C 提供的四种类型转换运算符&#xff08;static_cast、dynamic_cast、const_cast 和 reinterpret_cast&#xff09;的用法及适用场景&#xff0c;分析了它们相较于…...

AI预测福彩3D新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月3日第11弹

前面由于工作原因停更了很长时间&#xff0c;停更期间很多彩友一直私信我何时恢复发布每日预测&#xff0c;目前手头上的项目已经基本收尾&#xff0c;接下来恢复发布。当然&#xff0c;也有很多朋友一直咨询3D超级助手开发的进度&#xff0c;在这里统一回复下。 由于本人既精…...

ArcGIS Pro高级应用:高效生成TIN地形模型

一、引言 在地理信息科学与遥感技术的快速发展背景下&#xff0c;数字高程模型&#xff08;DEM&#xff09;已成为地形表达与分析的关键工具。 三角网&#xff08;TIN&#xff09;作为DEM的一种重要形式&#xff0c;因其能够精准描绘复杂地形特征而广受青睐。 ArcGIS Pro为用…...

【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元

第七届人文教育与社会科学国际学术会议&#xff08;ICHESS 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 目录 一、Spring Boot简介 1.1 Spring Boot的诞生背景 1.2 Spring Boot的核心特性 二、搭建开发环境 2.1…...

OpenWebUI提示器:Prompt工程的“智能助手”还是“自动化革命”?

引言&#xff1a;当AI对话成为日常&#xff0c;如何让模型更懂你&#xff1f; 在AI技术爆炸式发展的今天&#xff0c;从写邮件到生成代码&#xff0c;大型语言模型&#xff08;如ChatGPT、Claude等&#xff09;已深入日常场景。但你是否遇到过这样的问题&#xff1f; “为什么…...

Spring Boot 异步编程深入剖析

Spring Boot 异步编程深入剖析 1. 异步方法的使用 原理深度解析 Spring Boot 的异步方法基于 Spring 的 AOP&#xff08;面向切面编程&#xff09;实现。当在方法上添加 Async 注解时&#xff0c;Spring 会为该方法所在的类创建一个代理对象。当调用该异步方法时&#xff0c…...

使用pyinstaller和tinyaes,对加密文件文件源码进行打包

使用pyinstaller和tinyaes&#xff0c;对加密文件文件源码进行打包 winr后&#xff0c;进入cmd命令行 1. 安装虚拟环境 pip install virtualenv pip install virtualenvwrapper-win2. 制作虚拟环境 mkvirtualenv -p"你的Python解释器地址" py版本号 例如&#xff…...

分布式和微服务的理解

分布式系统 概念&#xff1a;分布式系统是由多个通过网络连接的节点组成的系统&#xff0c;这些节点分布在不同的地理位置或计算机上&#xff0c;它们相互协作&#xff0c;共同完成一个或多个任务&#xff0c;对用户或外部系统而言&#xff0c;就好像是一个单一的、统一的系统…...

麒麟V10-SP2-x86_64架构系统下通过KVM创建虚拟机及配置虚机的NAT、Bridge两种网络模式全过程

文章目录 一、什么是虚拟化&#xff1f;虚拟化具有哪些优势 二、常见的虚拟化技术1、kvm介绍2、kvm工作原理3、kvm功能 三、安装kvm并启动第一个kvm机器1、环境准备2、安装kvm工具3、启动并设置开机自启 libvirtd 服务4、验证 KVM 模块是否加载5、上传系统镜像到指定目录6、网络…...

watchEffect的用法

watchEffect的用法 watchEffect的回调方法里&#xff0c;用到了哪个属性&#xff0c;就监视哪个属性 let temp 0; let height 0; watchEffect(()>{if(temp.value > 60 || height.value > 80){console.log(给服务器发请求)} })...

第15届 蓝桥杯 C++编程青少组中级省赛 202408 真题答案及解析

第 1 题 【 单选题 】 定义 char a[]="hello\nworld",执行 cout<<a,输出结果是( ) A:helloworld B: hello world C:hellonworld D:hello\nworld 解析: 转义字符的作用 \n 是换行符,会被编译器解析为换行操作,而非直接输出字符 \n。 输出…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...