OpenHarmony内核源码分析(忍者ninja篇) | 都忍者了能不快吗

🚥往期推文全新看点(文中附带最新·鸿蒙全栈笔记)

1️⃣ 鸿蒙(HarmonyOS)北向开发知识点记录~

2️⃣ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~

3️⃣ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

4️⃣ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

5️⃣ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

6️⃣ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

7️⃣ 记录一场鸿蒙开发岗位面试经历~

8️⃣ 持续更新中……


ninja | 忍者

ninja是一个叫 Evan Martin的谷歌工程师开源的一个自定义的构建系统,最早是用于 chrome的构建,Martin给它取名 ninja(忍者)的原因是因为它strikes quickly(快速出击).这是忍者的特点,可惜Martin不了解中国文化,不然叫小李飞刀更合适些.究竟有多块呢? 用Martin自己的话说是当一个文件被修改后,ninja从发现到编译速度是make的十倍.有没有十倍不是本篇讨论的重点,人家做出来了,就算是牛皮也该人家吹.本篇是要对鸿蒙如何使用ninja做一个比较详细的阐述.

ninja是一个重视速度的构建系统,与其对标的是Make,它们都依赖于文件的时间戳进行检测重编.

  • 它的设计目的是让更高级别的构建系统生成其输入端文件,其并不希望你手动去编.ninja文件,可以生成.ninja的工具有gn,cmake,premake,甚至你自己都可以写个 ninja 生成工具.
  • ninja非常高效,可理解为构建系统中的汇编语言。
  • ninja文件没有分支、循环的流程控制,是被指定了一堆规则的文件,所以要比Makefile简单很多
  • 目前已知的GoogleChromeAndroid的一部分,LLVMV8, 方舟编译器, 鸿蒙 等大型系统都使用到了ninja构建.

基本概念

概念	中译	解释
edge	边      即build语句,指定目标(输出)、规则与输入,是编译过程拓扑图中的一条边(edge)。
target	目标	编译过程需要产生的目标,由build语句指定。
output	输出	build语句的前半段,是target的另一种称呼。
input	输入	build语句的后半段,用来产生output的文件或目标,另一种称呼是依赖。
rule	规则	通过指定command与一些内置变量,决定如何从输入产生输出。
pool	池      一组rule或edge,通过指定其depth,可以控制并行上限。
scope	作用域	变量的作用范围,有rule与build语句的块级,也有文件级别。rule也有scope。
--------------------------------------------------------------------------------------------
关键字	  作用
build	  定义一个edge。
rule	  定义一个rule。
pool	  定义一个pool。
default	  指定默认的一个或多个target。
include	  添加一个ninja文件到当前scope。
subninja  添加一个ninja文件,其scope与当前文件不同。
phony     一个内置的特殊规则,指定非文件的target。

简单的ninja

首先 ninja 一定是简单的,呆板的.凡是能被工具生成的东西,一定是在不断的重复某种简单,众多的简单按一定的规则有效叠加起来就能解决复杂的问题,请仔细想想是不是这个道理.ninja简单到没什么语法,只是几个概念和规则.

看个示例:

cflags = -Wall -Werror  #全局变量
rule cc
  command = gcc $c
<think>我们正在处理用户关于VSCode中Console Ninja扩展无效的问题。根据之前的对话历史,用户已经尝试过一些常规的浏览器扩展排查步骤,但问题可能出现在VSCode集成环境中。 用户当前的问题描述是:在VSCode中使用Console Ninja扩展时遇到了问题,该扩展无法正常工作。 我们需要结合VSCode环境的特点来提供解决方案。注意,Console Ninja在VSCode中可能作为扩展安装,但它依赖于浏览器(通常是Chrome)的开发者工具。因此,问题可能涉及VSCode与浏览器的交互。 根据引用[4]和[5]中提到的构建工具(如ninja)和编译错误,我们注意到用户可能在进行一些本地开发,可能涉及C++或类似的项目,但这不是当前问题的重点。当前重点在VSCode的Console Ninja扩展。 我们提供以下步骤: 1. **确认扩展安装**: - 在VSCode中,打开扩展视图(Ctrl+Shift+X),搜索"Console Ninja",确保已安装并启用。 2. **检查依赖的浏览器**: - Console Ninja需要与浏览器(如Chrome)的开发者工具协同工作。确保你的默认浏览器是Chrome或Edge(基于Chromium的浏览器),并且已安装Console Ninja的浏览器扩展(如之前回答中所述,浏览器扩展必须启用)。 3. **配置VSCode的调试设置**: - 在VSCode中,打开调试视图(Ctrl+Shift+D),确保你正在使用正确的调试配置(例如,选择Chrome作为调试环境)。 - 在`launch.json`配置文件中,确保`type`属性设置为`chrome`(或`pwa-chrome`),并且其他配置正确。例如: ```json { "type": "pwa-chrome", "request": "launch", "name": "Launch Chrome", "url": "http://localhost:8080", "webRoot": "${workspaceFolder}" } ``` - 注意:Console Ninja需要调试会话启动才能工作。 4. **启用Console Ninja的日志记录**: - 在VSCode中,打开设置(Ctrl+,),搜索"Console Ninja",确保相关设置已启用,例如: - `consoleNinja.enable`: 设置为`true` - `consoleNinja.debugMode`: 若需要,可暂时开启以获取更多日志 5. **检查浏览器连接**: - 启动调试会话后,检查浏览器是否已连接到VSCode。在VSCode的调试控制台中,你应能看到来自Console Ninja的日志。 - 注意:Console Ninja会在浏览器控制台的日志旁边显示一个忍者图标(🥷),点击该图标可以跳转到VSCode中的源代码位置。如果这个图标没有出现,说明扩展没有正常工作。 6. **排查冲突**: - 禁用其他可能干扰的VSCode扩展(特别是其他调试或日志相关的扩展),然后重启VSCode。 7. **查看输出日志**: - 在VSCode中,转到“输出”视图(Ctrl+Shift+U),从下拉菜单中选择“Console Ninja”,查看扩展的输出日志,以发现可能的错误信息。 8. **更新和重新安装**: - 确保VSCode和Console Ninja扩展都是最新版本。如果问题仍然存在,尝试卸载并重新安装Console Ninja扩展。 9. **项目类型限制**: - Console Ninja主要针对JavaScript/TypeScript项目。如果项目是其他语言(如C++、Python等),Console Ninja可能无法工作。 10. **特定框架注意事项**: - 对于使用构建工具(如Webpack、Vite)的项目,确保已正确生成source map,因为Console Ninja依赖source map来映射源代码位置[^1]。可以在浏览器开发者工具的Source面板中检查是否存在正确的source map文件。 如果以上步骤无法解决问题,建议查看Console Ninja的官方文档或GitHub仓库的问题页面。 生成的相关问题: 1. 如何在VSCode中配置Chrome调试? 2. 如何为JavaScript项目生成source map? 3. VSCode扩展不工作的通用排查方法有哪些?</think>### VSCode 中 Console Ninja 无效的解决方案 Console Ninja 在 VSCode 中失效通常是由于调试配置、扩展冲突或依赖环境问题导致。请按以下步骤排查: --- #### 1. **验证扩展安装状态** - 打开 VSCode 扩展面板(`Ctrl+Shift+X`) - 搜索 `Console Ninja` 确认已安装且启用 - 检查版本是否最新(2023.5+ 支持最新调试协议)[^1] #### 2. **配置调试环境** - 在 `.vscode/launch.json` 中确保使用正确调试器: ```json { "type": "pwa-chrome", // 必须为 Chromium 内核调试器 "request": "launch", "name": "Launch Chrome", "url": "http://localhost:3000", "webRoot": "${workspaceFolder}" } ``` - **关键设置**:添加 `"console": "externalTerminal"` 强制日志输出到调试控制台 #### 3. **检查依赖工具链** - 确保系统已安装必要构建工具: - **Ninja 构建系统**(引用[4][5]报错关联): ```bash # Linux/macOS brew install ninja # Windows (通过 Chocolatey) choco install ninja ``` - **Node.js 环境**:`node -v` 需 ≥ v14.0 #### 4. **排查扩展冲突** - 临时禁用其他调试相关扩展: - Prettier/ESLint - Live Server - 其他 Console 增强工具 - 在 VSCode 命令面板运行: ``` Developer: Show Running Extensions ``` 检查 Console Ninja 是否正常加载 #### 5. **启用调试模式** - 在 VSCode 设置(`settings.json`)添加: ```json "consoleNinja.debugMode": true, "consoleNinja.logLevel": "debug" ``` - 查看输出面板选择 `Console Ninja` 日志,定位具体错误 #### 6. **重建依赖环境** 若涉及本地编译(如引用[3][4]场景): ```bash # 清除缓存 rm -rf node_modules .next dist # 重新安装依赖(使用与项目匹配的包管理器) npm install --force # 或 yarn install --force # 重建项目 npm run build ``` --- ### 常见故障处理表 | 现象 | 解决方案 | |-------------------------------|-----------------------------| | 调试时无 🥷 图标 | 检查 `launch.json` 的 `type` 配置 | | 日志无法跳转源码 | 确认 Source Map 已生成[^1] | | 报错 `ninja: build stopped` | 安装 Ninja 构建工具[^4] | | 异步调用栈缺失 | 启用 `asyncStackTraces` 选项 | > ⚠️ 若仍无效,在终端执行 `code --disable-extensions` 启动纯净模式测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值