Linux内核宕机分析:从vmcore黑匣子到死锁根因定位实战
1. 从一次线上宕机说起为什么vmcore是系统工程师的“黑匣子”那天凌晨三点我被一阵急促的告警电话惊醒。监控大屏上一台核心业务服务器的CPU使用率曲线从平稳的30%瞬间拉成一条直线紧接着是网络连接数断崖式下跌应用日志戛然而止。登录服务器SSH已经无响应。控制台看到的是一片寂静。面对一台“脑死亡”的物理机或虚拟机第一反应往往是重启但这无异于销毁犯罪现场。幸运的是我们的系统配置了kdump服务。几分钟后在预设的转储路径下一个名为vmcore的巨大文件静静地躺在那里大小与服务器的物理内存相当。这个文件就是Linux内核在崩溃瞬间的完整内存快照是解开这次宕机谜团的唯一钥匙。vmcore文件对于Linux系统工程师、内核开发者乃至运维人员而言其地位堪比航空领域的“黑匣子”。当内核因遇到无法处理的严重错误如空指针解引用、内存越界、死锁、硬件故障而陷入panic时它会通过kdump机制启动一个第二内核捕获内核将第一内核生产内核的完整内存内容包括所有进程的状态、内核数据结构、堆栈信息、寄存器值等压缩后转储到指定的存储设备上生成vmcore文件。这个过程是在一个最小化的、独立的环境中完成的确保了崩溃现场的最大限度保存。分析vmcore就是从这一团看似无序的二进制数据中逆向推演出崩溃发生的精确位置、直接原因乃至深层逻辑错误。这不仅仅是排错更是一次对系统运行时状态的深度尸检。无论是偶发性的“灵异”宕机还是由新部署的内核模块、驱动引发的系统性崩溃vmcore分析都是定位根因的终极手段。本文就将以一个从业者的视角手把手拆解vmcore分析的完整流程、核心工具链和实战技巧让你在下次面对系统“猝死”时能够从容地拿起手术刀而非简单地按下重启键。2. 分析前的战场准备环境、工具与第一印象拿到一个vmcore文件切忌直接上重型工具。就像侦探到达现场首先要观察环境。一套稳定、高效的分析环境是成功的一半。2.1 构建分析主机环境理想的分析环境是一台独立的、磁盘空间充足的Linux主机。不建议在生产服务器上直接分析因为crash工具和vmcore本身会消耗大量内存和CPU资源。系统选择推荐使用与崩溃服务器相同或相近发行版如都是CentOS 7.x的系统这能最大程度保证内核数据结构的兼容性减少符号解析错误。如果无法满足至少保证crash工具版本与glibc库版本足够新。内核调试信息包这是最关键的准备工作没有之一。vmcore中只有内存数据没有符号信息即函数名、变量名。你需要安装与崩溃内核完全一致版本的kernel-debuginfo和kernel-debuginfo-common包。例如崩溃内核版本是3.10.0-1160.el7.x86_64你就必须找到对应版本的kernel-debuginfo-3.10.0-1160.el7.x86_64.rpm。通常可以从发行版的调试信息仓库或官方镜像站获取。安装crash工具crash是分析vmcore的瑞士军刀一个集成了GDB功能的专用工具。通过包管理器安装即可yum install crash或apt install crash。传输vmcorevmcore文件通常很大几十GB到数百GB。使用scp、rsync配合-z压缩或netcat进行传输。确保目标分析机有足够磁盘空间至少是vmcore文件大小的2倍因为解压和分析过程需要临时空间。2.2 首次加载与初步勘察环境就绪后使用crash命令加载vmcore和调试信息。基本命令格式如下crash /usr/lib/debug/lib/modules/uname -r/vmlinux /path/to/vmcore这里有两个关键参数vmlinux这是带有调试符号的内核镜像文件通常来自kernel-debuginfo包。uname -r需要替换为分析主机的内核版本但crash会根据vmcore中的信息自动匹配正确的符号表。更稳妥的做法是指定从调试信息包中提取出的、与崩溃内核对应的确切vmlinux文件路径。vmcore转储文件路径。加载成功后你会进入crash交互式命令行。首先给自己建立一个全局观sys命令输入sys这是你看到的第一个也是最重要的信息。它会输出崩溃服务器的基本信息。crash sys KERNEL: /usr/lib/debug/lib/modules/3.10.0-1160.el7.x86_64/vmlinux DUMPFILE: /data/vmcore-20231027 [PARTIAL DUMP] CPUS: 48 DATE: Wed Oct 27 03:14:22 2023 UPTIME: 65 days, 12:34:56 LOAD AVERAGE: 5.67, 4.89, 3.45 TASKS: 1245 NODENAME: prod-db-01 RELEASE: 3.10.0-1160.el7.x86_64 VERSION: #1 SMP Tue Aug 18 14:50:17 EDT 2020 MACHINE: x86_64 (3200 Mhz) MEMORY: 256 GB PANIC: Kernel panic - not syncing: softlockup: hung tasks这里的信息价值连城CPU数量、系统运行时间、负载、任务数、主机名、内核版本、内存大小以及最关键的一行——PANIC信息。本例中直接指出了“软锁死挂起的任务”。这已经将调查范围从“整个内核”缩小到了“任务调度/锁”相关的问题。bt命令查看崩溃时当前上下文通常是触发panic的那个CPU的堆栈回溯。输入btbacktrace的缩写。crash bt PID: 0 TASK: ffff887f7e20c100 CPU: 23 COMMAND: swapper/23 #0 [ffff887f7e2c3e10] crash_nmi_callback at ffffffff8106a4b0 #1 [ffff887f7e2c3e60] nmi_handle at ffffffff8164a7db #2 [ffff887f7e2c3eb0] do_nmi at ffffffff8164abce #3 [ffff887f7e2c3ee0] end_repeat_nmi at ffffffff8164a0f7 [exception RIP: native_queued_spin_lock_slowpath162] RIP: ffffffff8125c2d2 RSP: ffff887f7e2c3f98 RFLAGS: 00000046 RAX: 0000000000000000 RBX: ffff887f7e20c100 RCX: 0000000000000001 RDX: ffff887fc1e6b700 RSI: 0000000000000001 RDI: ffff887fc1e6b700 RBP: ffff887f7e2c3fa0 R8: 0000000000000000 R9: 0000000000000000 R10: 0000000000000001 R11: 0000000000000000 R12: ffff887fc1e6b700 R13: 0000000000000000 R14: ffff887f7e2c3f98 R15: 0000000000000000 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 #4 [ffff887f7e2c3fa0] _raw_spin_lock_irqsave at ffffffff8164e9bf #5 [ffff887f7e2c3fb0] __schedule at ffffffff8108a7dd ... (更多栈帧)堆栈显示了崩溃时代码的执行路径。最顶部的帧#0通常是崩溃处理函数本身我们需要往下找找到属于我们业务逻辑或内核模块的帧。这里看到在native_queued_spin_lock_slowpath这个自旋锁慢路径中发生了问题并且是在调度器__schedule的上下文中。这印证了PANIC信息中的“软锁死”。注意首次加载时如果遇到“crash: invalid kernel virtual address”等错误99%的原因是vmlinux文件与vmcore的内核版本不匹配。请务必核对版本号确保完全一致。3. 深度尸检锁定元凶的进阶排查手段初步勘察给了我们方向但要定罪还需要更深入的证据链。crash提供了丰富的命令来检查系统的各个部分。3.1 检查进程与线程状态软锁死通常意味着有任务进程/线程长时间占用CPU而不释放。ps命令可以查看所有任务但信息量巨大。我们需要更精准的过滤。ps -c命令查看每个CPU上正在运行的任务。结合sys输出的崩溃CPU编号本例是CPU 23我们可以聚焦。crash ps -c 23 PID PPID CPU TASK ST %MEM VSZ RSS COMM 0 0 23 ffff887f7e20c100 RU 0.0 0 0 [swapper/23] 12345 1 23 ffff887fc1e6b700 UN 2.5 3456789 1234567 my_busy_task可以看到在CPU 23上除了空闲任务swapper还有一个名为my_busy_task的任务处于UN不可中断睡眠或RU运行状态。这很可能就是嫌疑犯。检查特定任务的详细状态使用task task_address或pid PID命令。地址来自ps命令输出的TASK列。crash task ffff887fc1e6b700 PID: 12345 TASK: ffff887fc1e6b700 CPU: 23 COMMAND: my_busy_task STRUCT INFO: {size} 5952, {page_size} 4096 ... (输出该任务结构体的所有字段)更关键的是查看它的内核栈和用户栈crash bt ffff887fc1e6b700这会显示my_busy_task任务在崩溃时的调用栈。如果它的栈顶一直停留在某个内核函数比如一个自旋锁操作或一个循环中那它就是导致锁死的直接原因。3.2 分析内存与资源使用锁死也可能源于资源耗尽。我们需要检查内存、文件描述符等。kmem -i命令查看内核内存分配器的概况slab信息。crash kmem -i SLAB ALLOCATED TOTAL SIZE kmalloc-8192 120 256 8192 ... (众多slab缓存)观察是否有某个slab缓存几乎被耗尽ALLOCATED接近TOTAL这可能暗示有内存泄漏导致后续分配失败引发死锁。vm -p task_address命令查看特定任务的虚拟内存映射。如果某个任务映射了异常巨大的内存区域也值得怀疑。files -p PID命令查看进程打开的文件描述符列表。文件描述符泄露也是常见问题。3.3 检查锁与等待队列既然堆栈提示了自旋锁问题我们需要深入检查锁的状态。log命令查看内核环形缓冲区dmesg在崩溃前的最后信息。有时锁死前内核会打印出警告。crash log ... [ 5032.123456] INFO: task my_busy_task:12345 blocked for more than 120 seconds. [ 5032.123457] Tainted: P OE ------------ 3.10.0-1160.el7.x86_64 [ 5032.123458] echo 0 /proc/sys/kernel/hung_task_timeout_secs disables this message. [ 5032.123459] my_busy_task D ffff887fc1e6b700 0 12345 1 0x00000080 [ 5032.123460] Call Trace: [ 5032.123461] [ffffffff8108a7dd] __schedule0x29d/0x8c0 [ 5032.123462] [ffffffff8108ac86] schedule0x36/0x80 [ 5032.123463] [ffffffffa0123456] my_driver_ioctl0x123/0x456 [my_faulty_driver] [ 5032.123464] [ffffffff811a1234] do_vfs_ioctl0x94/0x5a0 ... (更早的日志可能揭示了锁的持有者)Bingo日志清晰地显示my_busy_task任务被阻塞超过120秒并且阻塞点在my_driver_ioctl函数中这个函数来自一个名为my_faulty_driver的内核模块。这几乎是指纹级的证据。检查等待队列如果知道锁的地址可能从堆栈或日志中推断可以用struct命令查看其结构。但更常见的是我们需要分析为什么任务在等待。这通常需要结合代码内核模块源码进行理解。4. 实战推演一个由内核模块缺陷引发的死锁案例让我们将上面的分析线索串联起来还原一个完整的故障场景。背景服务器运行了一个第三方开发的硬件加速卡驱动模块my_faulty_driver。该驱动提供了一个ioctl接口供用户态程序调用。时间线还原进程APID: 12345my_busy_task调用ioctl进入内核执行my_driver_ioctl。在该函数中它获取了一个驱动内部的全局自旋锁driver_lock。在持有driver_lock期间my_driver_ioctl需要分配一块较大的DMA缓冲区。它调用了kmalloc。此时系统内存压力较大。kmalloc在尝试分配时可能触发内存回收直接回收或kswapd。内存回收过程可能需要回写脏页或交换页这涉及到文件系统操作。巧合的是文件系统的某个操作路径例如写入ext4的journal也需要获取某个锁例如一个全局的journal_lock。而另一个内核线程B例如kswapd或jbd2日志提交线程已经持有了这个journal_lock并且它也在等待获取driver_lock也许是因为驱动也提供了某个文件操作回调。于是经典的AB-BA死锁形成进程A持有driver_lock等待journal_lock。内核线程B持有journal_lock等待driver_lock。进程A在kmalloc中睡眠等待内存但它没有释放driver_lock自旋锁在持有期间是不能睡眠的这是内核编程铁律。这导致了driver_lock被永久占用。内核的软锁死检测机制watchdog在120秒后检测到有任务进程A处于D状态且不调度遂触发panic生成vmcore。在vmcore中的证据链sys显示PANIC: softlockup: hung tasks。bt在崩溃CPU上显示堆栈在自旋锁和调度器代码中。ps -c和bt task_address显示进程Amy_busy_task的堆栈停留在my_driver_ioctl中且状态为D不可中断睡眠。log命令提供了决定性证据显示了进程A被阻塞120秒调用链指向my_driver_ioctl并且更早的日志可能显示了关于driver_lock或journal_lock的警告。通过struct命令检查driver_lock等相关数据结构可能发现其owner字段指向进程A的任务地址而wait_list上可能有其他等待者。根因结论my_faulty_driver内核模块的my_driver_ioctl函数违反了内核编程规则在持有自旋锁driver_lock的情况下调用了可能睡眠的函数kmalloc在内存紧张时。这导致了与内存管理/文件系统代码路径的潜在死锁。解决方案立即措施卸载有问题的my_faulty_driver模块如果允许。根本修复联系驱动开发商修复my_driver_ioctl函数。必须在调用可能睡眠的分配函数如kmalloc(GFP_KERNEL)之前释放自旋锁或者在初始时就使用不会睡眠的分配标志如GFP_ATOMIC但这仅适用于小内存分配。对于大块DMA内存通常需要重构代码逻辑将锁的持有范围最小化。5. 超越crash辅助工具与高级技巧对于复杂的崩溃仅靠crash交互命令可能效率不高。我们可以将vmcore导出用更强大的工具进行离线分析。5.1 使用GDB进行符号化调试crash本质上是GDB的封装。我们可以直接用GDB加载vmcore这对于有GDB使用经验的开发者更友好尤其是需要查看复杂数据结构或反汇编代码时。gdb /usr/lib/debug/lib/modules/uname -r/vmlinux /path/to/vmcore (gdb) bt # 同样可以查看堆栈 (gdb) p *((struct task_struct*)0xffff887fc1e6b700) # 查看任务结构体 (gdb) disassemble my_driver_ioctl # 反汇编可疑函数GDB的优势在于其强大的脚本能力.gdbinit和更灵活的变量查看。5.2 使用makedumpfile进行过滤和压缩原始的vmcore包含所有物理内存页但很多页面如用户空间进程的代码段、未使用的内存对于分析内核崩溃可能不是必需的。makedumpfile工具可以过滤出只与内核相关的页面生成一个更小的“精简转储”文件便于传输和存储。# 生成一个只包含内核相关页面的精简vmcore makedumpfile -l --message-level 1 -d 31 /path/to/vmcore /path/to/vmcore-dumpfiltered # -d 31 是过滤级别表示保留所有可能对调试有用的页面然后可以用crash加载这个精简后的文件进行分析大多数情况下信息是完整的。5.3 自动化分析与脚本编写对于需要频繁分析同类问题的团队可以编写crash脚本或Python脚本利用pykdump或crash的-i批处理选项来自动化提取关键信息。例如一个简单的脚本analyze.crashsys ps | grep -E D|R log -T | tail -50 foreach bt quit然后运行crash vmlinux vmcore -i analyze.crash report.txt。这可以快速生成一份包含系统状态、所有进程状态、最新日志和所有任务堆栈的初步报告。5.4 分析中的常见陷阱与心得符号表不匹配是万恶之源再次强调确保vmlinux与崩溃内核版本完全一致。即使是小版本号或构建ID不同也可能导致解析出的堆栈错乱误导分析。关注“Tainted”标志在sys输出或log中如果内核显示Tainted例如Tainted: PProprietary module loaded意味着有非开源模块加载。这提醒你崩溃很可能与这些第三方模块有关。部分转储PARTIAL DUMP的局限如果sys显示[PARTIAL DUMP]说明这不是一个完整的全内存转储。可能是kdump配置的内存预留不足或者转储过程中出错。部分转储可能缺少用户空间内存但内核关键数据通常会被保留对于分析内核崩溃大多够用。时间相关性分析结合log中的时间戳和系统uptime可以推断出崩溃前系统运行了多久在崩溃前是否有异常事件如大量错误日志、某个服务重启。不要忽视硬件因素如果崩溃点非常随机且堆栈指向内存访问错误如Unable to handle kernel paging request在排除软件问题后需要考虑硬件故障如内存条损坏ECC错误、CPU缓存问题等。此时需要结合服务器的硬件日志如BMC/IPMI日志一起分析。保存现场分析完vmcore后不要急于删除。将其与对应的vmlinux、内核rpm包、相关内核模块一起打包归档。未来如果发现类似问题可以进行对比分析。内核vmcore分析是一项结合了系统知识、编程经验和侦探直觉的工作。它没有银弹每一次分析都是一次独特的探险。从建立正确的分析环境开始遵循“从宏观到微观从现象到本质”的排查路径熟练运用crash这把解剖刀你就能从系统死亡的静默中聆听到故障根源的低语从而构建起更健壮、更可靠的服务。

相关新闻

游戏与虚拟互动大厂Java面试实录:JDK17、Redis分布式锁、Kafka对战削峰、Seata分布式事务、Spring AI+RAG智能NPC,谢飞机三轮被虐哭(附完整答案解析)

游戏与虚拟互动大厂Java面试实录:JDK17、Redis分布式锁、Kafka对战削峰、Seata分布式事务、Spring AI+RAG智能NPC,谢飞机三轮被虐哭(附完整答案解析)

游戏与虚拟互动大厂Java面试实录:JDK17、Redis分布式锁、Kafka对战削峰、Seata分布式事务、Spring AIRAG智能NPC,谢飞机三轮被虐哭(附完整答案解析) 🎮 面试场景设定 公司:游戏与虚拟互动独角兽「幻境互娱」…

2026/8/22 2:50:21 阅读更多 →
AI行业日报|2026-08-21:5个热点事件

AI行业日报|2026-08-21:5个热点事件

AI行业日报|2026-08-21:5个热点事件 1. 企业级AI支出波动:OpenAI在商业用户端逼近Anthropic Original URL: https://techcrunch.com/2026/08/20/openai-is-gaining-on-anthropic-with-business-users-new-data-indicates/ Published at: 2026…

2026/8/22 2:50:21 阅读更多 →
Fiddler 中文版:从本地部署到抓到第一条 HTTPS 请求

Fiddler 中文版:从本地部署到抓到第一条 HTTPS 请求

Fiddler 中文版:从本地部署到抓到第一条 HTTPS 请求 【免费下载链接】zh-fiddler Fiddler Web Debugger 中文版 项目地址: https://gitcode.com/gh_mirrors/zh/zh-fiddler 如果你只能在浏览器开发者工具里看到当前页面的请求,想调试手机 App 或桌…

2026/8/22 2:50:21 阅读更多 →

最新新闻

多智能体系统赋能与涌现:从理论到协同围捕实践

多智能体系统赋能与涌现:从理论到协同围捕实践

1. 多智能体赋能与群体复杂行为涌现:从理论到实践的全景拆解最近在复现和优化几个多智能体强化学习的项目时,我反复琢磨一个核心问题:为什么一群能力平平、规则简单的个体,一旦组织起来,就能完成远超单个个体能力的复杂…

2026/8/22 3:50:38 阅读更多 →
低成本DIY书籍扫描仪:从硬件搭建到可搜索PDF生成全流程

低成本DIY书籍扫描仪:从硬件搭建到可搜索PDF生成全流程

最近在整理个人藏书和资料时,发现很多绝版或珍贵的纸质书籍、笔记,既想永久保存,又希望能方便地在电子设备上阅读和检索。市面上的专业扫描仪要么价格昂贵,要么操作繁琐,不适合个人或小团队使用。于是,我萌…

2026/8/22 3:50:38 阅读更多 →
ChatGPT接管短信?苹果信息应用新插件帮你自动回复

ChatGPT接管短信?苹果信息应用新插件帮你自动回复

你是否曾幻想过让别人替你回消息?如今,这个愿望成真了——不过替你打字的不是人,而是AI。TechCrunch报道,OpenAI正在推出一个全新的Apple Messages插件,让ChatGPT能够直接在你和亲友的iMessage对话中充当自动代笔。 AI…

2026/8/22 3:50:38 阅读更多 →
自建Bark推送服务:从APNs原理到Docker部署实战

自建Bark推送服务:从APNs原理到Docker部署实战

1. 为什么你需要一个自己的推送服务?如果你用过一些第三方推送服务,比如 Server 酱、PushDeer,或者一些云服务商提供的推送功能,你大概率会遇到几个痛点:要么有推送频率限制,要么需要付费才能解锁高级功能&…

2026/8/22 3:50:38 阅读更多 →
AI招聘系统变革:世纪云猎如何解决2026年人才挑战

AI招聘系统变革:世纪云猎如何解决2026年人才挑战

1. 项目概述2026年的招聘市场正在经历一场由AI驱动的深刻变革。作为从业12年的人力资源技术顾问,我亲眼目睹了传统招聘系统如何被新一代AI工具颠覆。在这个背景下,"世纪云猎"系统正在成为企业招聘技术栈中不可或缺的组成部分。2. 为什么2026年…

2026/8/22 3:50:38 阅读更多 →
GAMIT/GLOBK v10.75 在 Ubuntu 上的完整安装与高精度 GNSS 数据处理实践指南

GAMIT/GLOBK v10.75 在 Ubuntu 上的完整安装与高精度 GNSS 数据处理实践指南

这次我们来看一个在北斗/GNSS高精度数据处理领域堪称“基石”的软件套件——GAMIT/GLOBK。对于从事大地测量、地壳形变监测、精密定位研究的科研人员和工程师来说,这套由麻省理工学院(MIT)和斯克里普斯海洋研究所(SIO)…

2026/8/22 3:49:38 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →