青少年编程与数学 02-004 Go语言Web编程 03课题、项目调试

news2024/12/17 14:58:53

青少年编程与数学 02-004 Go语言Web编程 03课题、项目调试

  • 课题摘要:
  • 一、程序调试
  • 二、调试方法
  • 三、错误处理
  • 四、打印调试
      • 步骤和实践:
      • 打印调试的最佳实践:
  • 五、日志记录
      • 为什么要进行日志记录:
      • 日志记录的关键要素:
      • 日志记录的最佳实践:
  • 六、调试器
      • 主要功能:
      • 用途:
      • 集成开发环境(IDE)中的调试器:
  • 七、GoLand调试器
  • 八、单元测试

本文探讨了程序调试的重要性和方法,包括错误检测、诊断、修复和验证。调试可通过手动调试、自动化测试、静态和动态分析等多种方式进行。介绍了打印调试、使用调试器、日志记录、单元测试等具体调试方法,以及错误处理策略如异常处理、错误日志记录和用户友好错误信息。特别强调了打印调试和日志记录的实践技巧,以及调试器的主要功能和用途。

课题摘要:

本文探讨了程序调试的重要性和方法,包括错误检测、诊断、修复和验证。调试可通过手动调试、自动化测试、静态和动态分析等多种方式进行。介绍了打印调试、使用调试器、日志记录、单元测试等具体调试方法,以及错误处理策略如异常处理、错误日志记录和用户友好错误信息。特别强调了打印调试和日志记录的实践技巧,以及调试器的主要功能和用途。最后,介绍了GoLand IDE中调试器的特性和使用方法,以及单元测试的重要性和关键点。调试是提高软件质量和可靠性的关键环节,而单元测试是确保代码最小可测试部分正确执行的重要方法。


一、程序调试

程序调试(Debugging)是软件开发过程中的一个重要环节,它指的是在程序开发完成后,通过各种技术手段找出程序中的错误(Bug)并修复它们的过程。调试的目的是确保程序能够按照预期的方式正确运行。以下是调试过程中的一些关键点:

  1. 错误检测:识别程序中不符合预期行为的部分。
  2. 错误诊断:确定导致错误的原因。
  3. 错误修复:修改代码以消除错误。
  4. 验证:确认错误已经被修复,并且程序能够正确运行。

调试可以通过多种方式进行:

  • 手动调试:开发者通过阅读代码、添加打印语句(Print statements)或使用调试器(Debugger)来逐步执行代码,观察程序的运行状态。
  • 自动化测试:使用单元测试、集成测试等自动化测试工具来发现错误。
  • 静态分析:使用静态代码分析工具来检查代码中可能的错误,这些工具不需要运行代码。
  • 动态分析:在程序运行时进行分析,以发现运行时错误。

调试是软件开发中不可或缺的一部分,因为它帮助提高软件的质量和可靠性。一个良好的调试过程可以减少软件发布后的问题,提高用户满意度。

二、调试方法

调试程序时可以采用多种具体方法,每种方法适用于不同的场景和需求。以下是一些常见的调试方法:

  1. 打印调试(Print Debugging)

    • 在代码中插入打印语句,输出变量的值或程序的状态,以跟踪程序的执行流程和变量的变化。
  2. 使用调试器(Debugger)

    • 利用集成开发环境(IDE)或独立的调试工具,如GDB、LLDB等,来逐步执行程序,检查变量值,设置断点,查看调用栈等。
  3. 日志记录(Logging)

    • 在代码中添加日志记录,记录程序的运行状态和关键信息,便于事后分析。
  4. 单元测试(Unit Testing)

    • 编写测试用例来验证代码的各个单元是否按预期工作,常用的单元测试框架有JUnit、pytest等。
  5. 集成测试(Integration Testing)

    • 测试模块间的接口和交互是否正确,确保各个模块能够协同工作。
  6. 代码审查(Code Review)

    • 通过人工检查代码来发现潜在的错误和改进代码质量。
  7. 静态代码分析(Static Code Analysis)

    • 使用工具自动分析代码,查找潜在的错误和不规范的代码写法。
  8. 动态代码分析(Dynamic Code Analysis)

    • 在程序运行时分析代码,检测运行时错误和性能问题。
  9. 性能分析(Profiling)

    • 分析程序的运行时间和资源消耗,找出性能瓶颈。
  10. 内存调试(Memory Debugging)

    • 检测内存泄漏、非法内存访问等问题,使用工具如Valgrind、AddressSanitizer等。
  11. 图形化调试工具

    • 使用图形化界面的工具来帮助理解程序的运行状态,如Visual Studio的调试器、Chrome的开发者工具等。
  12. 断点和观察点(Breakpoints and Watchpoints)

    • 在调试器中设置断点来暂停程序执行,观察点用于在特定变量值变化时暂停程序。
  13. 回溯调试(Backtrace Debugging)

    • 当程序崩溃时,查看调用栈的回溯信息来定位问题发生的位置。
  14. 异常处理(Exception Handling)

    • 在代码中使用异常处理机制来捕获和处理异常,避免程序异常退出。
  15. 模糊测试(Fuzz Testing)

    • 自动化地向程序输入大量随机数据,以发现潜在的错误和安全漏洞。

每种调试方法都有其优势和局限性,实际应用中可能需要结合多种方法来提高调试的效率和效果。

三、错误处理

错误处理是软件开发中用于识别、响应和恢复程序运行时出现的错误或异常情况的过程。良好的错误处理机制可以提高软件的健壮性、可靠性和用户体验。以下是一些常见的错误处理策略和实践:

  1. 异常处理

    • 许多编程语言提供了异常处理机制,如trycatchfinally块(在Java、C#等语言中)或tryexcept块(在Python中)。这些机制允许程序捕获和处理运行时错误。
  2. 错误日志记录

    • 记录错误信息到日志文件中,这对于事后分析和调试非常有用。
  3. 用户友好的错误信息

    • 向用户提供清晰、简洁且友好的错误信息,避免显示技术性或模糊的信息。
  4. 错误恢复

    • 提供错误恢复选项,比如撤销操作、重试或提供备用方案。
  5. 资源清理

    • 在发生错误时,确保所有分配的资源(如文件句柄、数据库连接、内存)都能被正确释放或清理。
  6. 事务管理

    • 对于数据库操作,使用事务来确保数据的一致性,如果操作失败可以回滚到稳定状态。
  7. 错误码和状态码

    • 使用错误码或状态码来表示不同类型的错误,便于程序识别和处理。
  8. 重试机制

    • 对于暂时性的错误(如网络问题),可以自动重试操作。
  9. 降级服务

    • 在系统部分功能不可用时,提供降级服务以保证核心功能的正常运行。
  10. 错误隔离

    • 确保一个错误不会导致整个系统崩溃,通过隔离错误影响范围来保护系统稳定性。
  11. 超时和取消

    • 对于可能长时间运行的操作,设置超时限制,并提供取消操作的机制。
  12. 输入验证

    • 在数据进入系统之前进行验证,防止无效或恶意数据导致的错误。
  13. 容错设计

    • 在系统设计时就考虑错误处理,比如使用冗余、备份和故障转移机制。
  14. 监控和报警

    • 实时监控系统状态,一旦检测到异常,立即发出报警。
  15. 用户反馈

    • 提供机制让用户报告错误,这可以帮助开发者发现和修复未知的问题。

错误处理不仅仅是在代码中添加几个try-catch块那么简单,它需要在软件设计和开发过程中全面考虑,以确保软件在面对各种异常情况时能够保持稳定和可靠。

四、打印调试

打印调试(Print Debugging),也称为“插桩调试”(Logging Debugging),是一种基本但非常有效的调试技术。它涉及在代码中插入打印语句(print statements),以便在程序运行时输出变量的值、程序的状态或其他重要的调试信息。以下是打印调试的一些关键点:

步骤和实践:

  1. 插入打印语句

    • 在代码中的关键位置插入打印语句,输出你想要检查的变量值或程序的状态。
  2. 运行程序

    • 运行程序并观察控制台或日志文件中的输出。
  3. 分析输出

    • 分析打印出的信息,以确定程序的行为是否符合预期。
  4. 调整打印语句

    • 根据需要调整打印语句的位置和内容,以便更精确地定位问题。
  5. 移除或注释打印语句

    • 一旦问题解决,应该移除或注释掉这些打印语句,以避免影响程序的性能和输出的清晰度。

打印调试的最佳实践:

  • 选择关键点:在逻辑分支、循环入口和出口、函数调用前后等关键点插入打印语句。

  • 输出有意义的信息:确保打印的信息有助于理解程序的状态,比如变量值、程序流程、错误信息等。

  • 使用不同级别的日志:如果可能,使用不同级别的日志输出(如INFO, DEBUG, ERROR),这样可以在需要时只关注特定级别的信息。

  • 格式化输出:使用清晰的格式输出信息,便于阅读和理解。

  • 条件打印:在打印语句中加入条件判断,只在特定条件下输出信息,减少不必要的输出。

  • 避免滥用:不要在代码中随意插入大量的打印语句,这可能会使输出变得混乱,难以管理。

  • 考虑性能影响:过多的打印语句可能会影响程序的性能,特别是在生产环境中。

打印调试是一种简单直接的调试方法,适用于快速定位问题,尤其是在复杂逻辑或新代码中。然而,随着程序规模的增大和复杂性的提高,可能需要更高级的调试工具和方法,如使用调试器进行逐步调试。

五、日志记录

日志记录(Logging)是软件开发中用于监控和诊断程序运行状态的一种技术。通过记录程序运行时的详细信息,开发者可以追踪程序的行为,分析问题发生的原因,并优化程序性能。以下是日志记录的一些关键点和最佳实践:

为什么要进行日志记录:

  1. 错误诊断:当程序出现问题时,日志可以帮助快速定位错误发生的位置和原因。
  2. 性能监控:通过记录程序的运行时间和资源使用情况,可以识别性能瓶颈。
  3. 安全审计:记录用户操作和系统事件,用于安全审计和合规性检查。
  4. 用户行为分析:分析用户行为,优化用户体验。
  5. 系统监控和报警:实时监控系统状态,及时发现并响应异常情况。

日志记录的关键要素:

  1. 时间戳:每条日志记录都应该有一个时间戳,表明日志记录的时间。
  2. 日志级别:日志通常有不同的级别,如DEBUG、INFO、WARNING、ERROR、CRITICAL等,以区分日志的重要性。
  3. 消息内容:日志消息应该清晰、简洁,并且包含足够的信息来描述事件。
  4. 上下文信息:日志中可能需要包含一些上下文信息,如用户ID、会话ID、事务ID等。
  5. 异常信息:如果日志记录的是异常或错误,应该包含异常的类型、消息和堆栈跟踪。
  6. 日志格式:日志应该有统一的格式,便于解析和分析。

日志记录的最佳实践:

  1. 选择合适的日志框架:根据开发语言和平台选择合适的日志框架,如Log4j、SLF4J、NLog等。
  2. 定义日志级别:根据需要定义不同的日志级别,并在代码中合理使用。
  3. 避免过度日志记录:不要记录过多的细节,以免影响性能和日志的可读性。
  4. 保护敏感信息:不要在日志中记录敏感信息,如密码、个人身份信息等。
  5. 日志轮转和归档:设置日志轮转,避免日志文件过大,同时定期归档旧的日志文件。
  6. 异步日志记录:考虑使用异步日志记录以减少对程序性能的影响。
  7. 集中日志管理:在分布式系统中,使用集中日志管理系统,如ELK(Elasticsearch、Logstash、Kibana)堆栈。
  8. 日志分析工具:使用日志分析工具来帮助分析和可视化日志数据。
  9. 日志审查和监控:定期审查日志,并设置监控报警,以便及时发现问题。

日志记录是软件开发和运维中的一个重要组成部分,它不仅有助于解决当前的问题,还可以为未来的维护和优化提供数据支持。

六、调试器

调试器(Debugger)是一种工具,用于帮助开发者测试、调试和优化程序。它允许开发者在程序运行时检查和控制程序的执行,以便发现和修复代码中的错误。以下是调试器的一些主要功能和用途:

主要功能:

  1. 断点(Breakpoints)

    • 允许开发者设置断点,程序在这些点上会暂停执行,以便开发者可以检查程序状态。
  2. 单步执行(Stepping)

    • 允许开发者单步执行代码,逐行或逐条指令查看程序的执行过程。
  3. 查看变量(Inspecting Variables)

    • 允许开发者查看和修改变量的值,以观察对程序行为的影响。
  4. 调用栈(Call Stack)

    • 显示当前的调用栈,帮助开发者理解函数调用的顺序和层次。
  5. 条件断点(Conditional Breakpoints)

    • 允许开发者设置条件,仅当特定条件满足时才触发断点。
  6. 观察点(Watchpoints)

    • 监视特定变量,当变量值发生变化时自动暂停程序。
  7. 表达式求值(Expression Evaluation)

    • 允许开发者在调试会话中评估和执行代码表达式。
  8. 内存查看(Memory View)

    • 提供查看和分析内存中数据结构的能力。
  9. 源代码和汇编代码(Source and Assembly Code)

    • 显示源代码和对应的汇编代码,帮助理解程序的低级行为。
  10. 多线程调试(Multithreading Debugging)

    • 支持调试多线程程序,查看和管理各个线程的状态。
  11. 性能分析(Profiling)

    • 一些调试器集成了性能分析工具,帮助识别程序的性能瓶颈。
  12. 远程调试(Remote Debugging)

    • 允许开发者远程连接到另一台机器上的程序进行调试。

用途:

  • 错误定位:帮助开发者快速定位代码中的错误。
  • 性能优化:通过分析程序的执行路径和资源使用情况,优化程序性能。
  • 代码理解:对于复杂的代码库,调试器可以帮助新加入项目的开发者更快地理解代码。
  • 教育和学习:在教学和学习编程时,调试器是理解程序执行流程的有力工具。

集成开发环境(IDE)中的调试器:

大多数现代集成开发环境(IDE)都内置了功能强大的调试器,如Visual Studio、Eclipse、IntelliJ IDEA等。这些调试器提供了图形用户界面(GUI),使得设置断点、单步执行和查看变量等操作更加直观和方便。

调试器是软件开发中不可或缺的工具之一,它极大地提高了代码调试的效率和效果。

七、GoLand调试器

GoLand 是一款专为 Go 语言开发的集成开发环境(IDE),它提供了一套强大的调试工具,帮助开发者高效地调试 Go 应用程序。以下是 GoLand 中调试器的一些关键特性和使用方法:

  1. 启动调试模式

    • 在 GoLand 中打开要调试的 Go 程序,点击工具栏上的 Debug 按钮或使用快捷键 Shift+F9 启动调试模式。GoLand 会自动构建并运行程序,并进入调试模式。
  2. 设置断点

    • 在代码中你想要暂停程序执行的地方设置断点。通常,你只需在代码行的左边单击即可设置断点,断点会以红色圆形图标标记。
  3. 调试工具窗口

    • GoLand 提供了一个调试工具窗口,包含多个选项卡,用于查看程序状态、变量值等信息。常用的选项卡包括:
      • Variables:查看当前程序中所有可用的变量,包括当前作用域内的所有变量及其值。
      • Watches:创建表达式监视,跟踪某个或某些变量的值。
  4. 单步执行

    • 使用单步执行功能(Step into, Step over, Step out)来逐行或逐函数查看程序的执行过程。
  5. 调用栈查看

    • 调试器显示当前的调用栈,帮助开发者理解函数调用的顺序和层次。
  6. 条件断点和观察点

    • 设置条件断点,仅当特定条件满足时才触发断点。同时,可以设置观察点监视特定变量,当变量值发生变化时自动暂停程序。
  7. 表达式求值

    • 在调试会话中评估和执行代码表达式,查看变量和表达式的当前值。
  8. 核心转储和可逆调试器

    • GoLand 支持使用核心转储(Core Dump)来调试程序,这允许开发者在程序崩溃时查看 goroutine、线程和变量的值。此外,GoLand 使用 Mozilla 的 rr 项目支持可逆调试,这种调试器允许开发者在执行中前进和返回,有效地撤消步骤之间的所有操作,这对于难以复现的 bug 特别有用。
  9. 远程调试

    • GoLand 支持在本地计算机上调试正在运行的远程应用程序,这需要在远程服务器上安装相同的版本 Delve,并配置适当的端口和防火墙设置。
  10. 调试测试

    • GoLand 能够识别标准的测试包,并允许直接从编辑器窗口运行和调试测试用例。

GoLand 的调试器是一个功能丰富且强大的工具,它提供了多种方式来帮助开发者定位和解决 Go 程序中的问题。通过这些高级调试功能,开发者可以更有效地进行代码调试和性能优化。

八、单元测试

单元测试(Unit Testing)是软件开发过程中的一种测试方法,它关注于验证代码的最小可测试部分,通常是一个函数或方法。单元测试的目的是确保每个单元(函数或方法)按照预期工作,并且能够独立于系统的其他部分进行测试。以下是单元测试的一些关键点:

  1. 测试范围

    • 单元测试通常针对代码中的单个函数或方法,确保它们在各种输入条件下都能正确执行。
  2. 测试独立性

    • 每个单元测试应该是独立的,一个测试的运行不应该影响其他测试的结果。
  3. 测试自动化

    • 单元测试通常是自动化的,可以通过测试框架(如JUnit、pytest、NUnit等)自动运行。
  4. 测试覆盖率

    • 单元测试的覆盖率指的是代码中被测试覆盖的部分。高覆盖率意味着更多的代码被测试覆盖,但这并不总是意味着代码质量高。
  5. 测试用例

    • 每个单元测试通常包含多个测试用例,覆盖不同的输入和预期输出。
  6. 边界条件

    • 单元测试应该包括对边界条件的测试,这些是函数或方法可能失败的边缘情况。
  7. 异常和错误处理

    • 单元测试应该验证函数或方法在遇到错误输入或异常情况下的行为。
  8. 测试隔离

    • 单元测试应该尽可能地模拟外部依赖,例如,使用模拟对象(Mock Objects)来替代数据库、网络服务等。
  9. 持续集成

    • 单元测试是持续集成(Continuous Integration, CI)流程的一部分,每次代码提交后都会自动运行单元测试,以确保新代码没有破坏现有功能。
  10. 测试驱动开发(TDD)

    • 测试驱动开发是一种开发实践,其中单元测试在编写实际代码之前被编写,以指导开发过程。
  11. 代码质量

    • 单元测试有助于提高代码质量,因为它们可以捕获回归错误,并作为代码修改的文档。
  12. 易于维护

    • 良好的单元测试可以减少维护成本,因为它们提供了一个安全网,允许开发者在不破坏现有功能的情况下重构代码。

单元测试是软件开发中的一个重要实践,它有助于提高代码的可靠性和可维护性,并且是现代敏捷开发流程中不可或缺的一部分。

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

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

相关文章

2024,大模型杀进“决赛圈”

Henry Chesbrough在著作《通过技术创新盈利势在必行》中,曾提出过一个创新的“漏斗模型”。开放式创新一开始鼓励百花齐放,但最终只有10%的技术能够通过这个漏斗,成功抵达目标市场target market,进入到商业化与产业化的下一个阶段…

C++重点和练习-----多态

rpg.cpp: #include <iostream>using namespace std;/*模拟一个游戏场景有一个英雄&#xff1a;初始所有属性为1atk,def,apd,hp游戏当中有以下3种武器长剑Sword&#xff1a; 装备该武器获得 1atx&#xff0c;1def短剑Blade&#xff1a; 装备该武器获得 1atk&#xff0c;1…

细说STM32F407单片机SPI基础知识

目录 一、 SPI接口和通信协议 1、 SPI硬件接口 &#xff08;1&#xff09;MOSI(Master Output Slave Input) &#xff08;2&#xff09;MISO(Master Input Slave Output) &#xff08;3&#xff09;SCK 2、SPI传输协议 &#xff08;1&#xff09;CPHA0时的数据传输时序 …

种草电商系统APP功能需求开发案例

种草电商系统‌是一种结合了社区互动和电商交易的平台&#xff0c;能看到其他小伙伴分享的各种真实购物心得、超美商品图片和超实用视频&#xff0c;让我们去发现好物。可以随心关注感兴趣的人&#xff0c;跟他们畅聊购物体验&#xff0c;点赞、评论、转发那些心动的分享。其主…

EnumMap:让Java Map更高效的技巧

前言 摘要 内容 什么是EnumMap 如何使用EnumMap EnumMap的实现原理 EnumMap的例子 测试用例 小结 前言 在Java中&#xff0c;枚举类型是一种非常有用的数据类型&#xff0c;它可以用于定义一组固定的常量。枚举类型在很多场景中都有广泛的应用&#xff0c;例如状态码、…

测试工程师八股文05|功能测试、业务测试

一、基础概念 1、软件测试分类 1️⃣按照软件产生的阶段划分 单元测试&#xff1a;针对程序源代码进行测试【开发自测】集成测试&#xff1a;针对模块之间功能交互进行测试系统测试&#xff1a;对整个系统&#xff08;功能、非功能&#xff09;进行全面测试验收测试&#xff…

中国计算机学会计算机视觉专委会携手合合信息举办企业交流活动,为AI安全治理打开“新思路”

近期&#xff0c;《咬文嚼字》杂志发布了2024年度十大流行语&#xff0c;“智能向善”位列其中&#xff0c;过去一年时间里&#xff0c;深度伪造、AI诈骗等话题屡次登上热搜&#xff0c;AI技术“野蛮生长”引发公众担忧。今年9月&#xff0c;全国网络安全标准化技术委员会发布了…

《计算机视觉:瓶颈之辩与未来之路》

一、计算机视觉的崛起 计算机视觉是使用计算机模仿人类视觉系统的科学&#xff0c;让计算机拥有类似人类提取、处理、理解和分析图像以及图像序列的能力。它是一个多学科交叉的领域&#xff0c;与机器视觉、图像处理、人工智能、机器学习等领域密切相关。 计算机视觉行业可分为…

Airborne使用教程

1.安装环境 前提条件&#xff1a;系统已安装Ruby 打开终端输入如下命令 gem install airborne 或者在Gemfile添加 gem airborne 然后运行bundle install 2.编写脚本 在项目中新建api_tests_spec.rb文件 以GET接口"https://www.thunderclient.com/welcome"为…

Hadoop其一,介绍本地模式,伪分布模式和全分布搭建

目录 一、Hadoop介绍 二、HDFS的本地模式 三、伪分布模式 四、Hdfs中的shell命令 五、全分布搭建 六、使用Java代码操作HDFS 1、环境准备 2、单元测试&#xff08;Junit&#xff09;​编辑 一、Hadoop介绍 Hadoop 分为三部分 &#xff1a; Common、HDFS 、Yarn、MapRe…

【Tomcat】第五站:Servlet容器

Tomcat启动后&#xff0c;获取到项目当中所有的servlet的WebServlet中的配置信息。将配置信息和类对象都写入一个map集合当中。 map就是一个key-value类型的集合。 在MyTomcat中我们获取到了类对象和注解值。 Tomcat与请求连通 1. ServletConfigMapping 1. 创建一个config包…

猫眼浏览器v4.12.1重磅升级,极速、安全、保护全方位提升

猫眼浏览器&#xff08;Catsxp&#xff09;是一款经过深度优化的网页浏览器&#xff0c;凭借其创新性的设计理念和卓越的性能表现&#xff0c;正在重新定义现代浏览器的标准。这款基于Chrome内核精心打造的浏览器不仅为用户带来了全方位的网络体验提升&#xff0c;更在保护用户…

Axure原型设计技巧与经验分享

AxureRP作为一款强大的原型设计工具&#xff0c;凭借其丰富的交互设计能力和高保真度的模拟效果&#xff0c;赢得了众多UI/UX设计师、产品经理及开发人员的青睐。本文将分享一些Axure原型设计的实用技巧与设计经验&#xff0c;帮助读者提升工作效率&#xff0c;打造更加流畅、用…

梳理你的思路(从OOP到架构设计)_UML应用:业务内涵的分析抽象表达02

目录 1、举例(二) &#xff1a;西方童话 童话『青蛙王子』 的故事 故事中的概念 2、举例(三) &#xff1a;点餐服务 『 餐馆点餐服务』 的分析步骤&#xff1a; 1、举例(二) &#xff1a;西方童话 童话『青蛙王子』 的故事 从前有一位美丽的公主&#xff0c;喜欢玩金球。…

DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(一)

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 SNR 的物理含义7.2 信号质量加权的理论依据7.3 实际应用中…

23.DDD与微服务

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现&#xff0c;也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…

最新全开源IM即时通讯系统源码(PC+WEB+IOS+Android)部署指南

全开源IM&#xff08;即时通讯&#xff09;系统源码部署是一个复杂但系统的过程&#xff0c;涉及多个组件和步骤。以下是一个详细的部署指南&#xff0c;旨在帮助开发者或系统管理员成功部署一个全开源的IM系统&#xff0c;如OpenIM。      IM即时通讯系统源码准备工作   …

PVE系统下——OpenWRT一键扩容脚本(x86下EXT4SquashFS)

扩容了x86上的 OpenWrt 根分区和文件系统。 1.PVE 上增加硬盘大小 2.执行脚本 安装依赖 opkg update opkg install parted losetup resize2fs下载脚本并一键执行 wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced…

Midjourney教程之生成同一角色的不同姿势和服装

今天给大家介绍的是在 Midjourney 中如何创建同一个角色的不同姿势。这个功能是大家期待已久的&#xff0c;现在它已经正式可用了。 这个功能能够创建与原始图像相似的角色。"Character Reference" 功能类似于 "Style Reference"&#xff0c;但侧重于角色…