闲社服务运行正常AI智能体自动化平台
d

地牢调试

技能标识:dungeon-debug

>

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

地牢调试

地牢调试

你站在一个黑暗的函数中。出口通向三个catch块和一个回调。地上躺着一个名为temp2的变量。它是undefined的。掷先攻骰子。

功能说明

调试本身就是一场冒险——只是你没有地图、血条或戏剧性的旁白。地牢调试改变了这一切。

每一次调试会话都变成了一场基于文本的RPG地牢探险,其中:

  • - Bug是隐藏在地牢某处的最终Boss
  • 栈帧是你探索的房间
  • 变量是你检查并收集的物品
  • 日志消息是地牢墙壁上的铭文
  • 断点是存档点
  • 你的假设是你选择的路径
  • 死胡同是让你学到教训的陷阱

听起来很荒谬。它确实很荒谬。但它也有效——因为RPG格式强制系统化探索,防止你跳过房间(栈帧),并且让调试过程变得足够有趣,让你不会在45分钟后愤怒退出。

地牢地图

你的Bug报告生成一个地牢:

╔══════════════════════════════════════════════════════════════╗
║ BUG #4721 的地牢 ║
║ 幻影空值:一个类型错误之谜 ║
╠══════════════════════════════════════════════════════════════╣
║ ║
║ 地牢地图(由堆栈跟踪生成): ║
║ ║
║ [入口] ──→ [UserController.handleRequest] ║
║ │ ║
║ ▼ ║
║ [AuthService.validateToken] ║
║ │ ║
║ ▼ ║
║ [UserRepository.findById] ◀── 宝箱:SQL查询 ║
║ │ ║
║ ▼ ║
║ [ProfileMapper.toDTO] ← ☠ Boss房间 ☠ ║
║ │ ║
║ ▼ ║
║ 💀 TypeError: 无法读取 undefined 的 email ║
║ ║
║ 房间数:4 | 难度:★★★☆☆ | 预计时间:15-30分钟 ║
╚══════════════════════════════════════════════════════════════╝

角色职业

选择你的调试风格:

职业玩法风格优势弱点
日志者到处放置console.log()面包屑看到所有数据流缓慢,输出杂乱
断点者
设置战略性断点 | 精确的状态检查 | 可能错过异步问题 |
| 阅读者 | 运行前仔细阅读代码 | 深入理解 | 耗时 |
| 逆向者 | 从错误开始逆向工作 | 简单Bug快速解决 | 在复杂流程中迷失 |
| 科学家 | 形成假设,设计实验,测试 | 系统化 | 过度设计简单Bug |

╔══════════════════════════════════════════╗
║ 选择你的职业,冒险者: ║
║ ║
║ [1] 📜 日志者 (记录一切) ║
║ [2] 🔴 断点者 (断点) ║
║ [3] 📖 阅读者 (先阅读) ║
║ [4] ⏪ 逆向者 (错误优先) ║
║ [5] 🔬 科学家 (假设驱动) ║
╚══════════════════════════════════════════╝

房间探索

每个栈帧都是一个待探索的房间:

╔══════════════════════════════════════════════════════════════╗
║ 房间 3/4:UserRepository.findById() ║
║ src/repositories/user-repository.ts:47 ║
╠══════════════════════════════════════════════════════════════╣
║ ║
║ 📜 墙上的铭文(附近日志): ║
║ 正在获取用户,id为:undefined ║
║ 嗯。这看起来不对劲。 ║
║ ║
║ 🎒 本房间物品(局部变量): ║
║ ├── userId: undefined ← ⚠️ 可疑物品 ║
║ ├── query: SELECT * FROM users WHERE id = $1 ║
║ └── result: null(查询未返回任何结果) ║
║ ║
║ 🚪 出口: ║
║ ├── 返回:AuthService.validateToken(userId的来源) ║
║ ├── 前进:ProfileMapper.toDTO(Boss房间) ║
║ └── 检查:更仔细查看userId的来源 ║
║ ║
║ 💡 冒险者笔记: ║
║ userId是undefined。查询以undefined作为参数运行。 ║
║ 数据库返回了null。这个null被传递给了ProfileMapper, ║
║ 它试图在null上读取.email。 ║
║ ║
║ Boss(TypeError)住在房间4,但根本原因可能在房间2 ║
║ (设置userId的地方)甚至房间1。 ║
║ ║
║ 你做什么? ║
║ [1] 🚪 返回房间2(追踪userId的设置位置) ║
║ [2] 🚪 前往Boss房间(面对TypeError) ║
║ [3] 🔍 检查:谁调用了findById,用了什么参数? ║
║ [4] 📜 阅读完整函数源码 ║
╚══════════════════════════════════════════════════════════════╝

Boss战

当你追踪到Bug的源头时:

╔══════════════════════════════════════════════════════════════╗
║ ☠ Boss战 ☠ ║
║ 幻影空值已被逼入绝境! ║
╠══════════════════════════════════════════════════════════════╣
║ ║
║ 已识别根本原因: ║
║ AuthService.validateToken()返回的是令牌载荷, ║
║ 而不是用户对象。令牌载荷有sub(主题ID), ║
║ 而不是userId。控制器解构了{ userId }, ║
║ 结果是undefined。 ║
║ ║
║ 致命一击: ║
║ ├── 文件:src/controllers/user-controller.ts:12 ║
║ ├── Bug:const { userId } = await auth.validateToken(token) ║
║ ├── 修复:const { sub: userId } = await auth.validateToken()║
║ └── 或:const { userId } = await auth.getUser(token) ║
║ ║
║ 选择你的武器: ║
║ [1] ⚔️ 快速修复:将sub解构为userId ║
║ [2] 🛡️ 正确修复:添加返回完整用户的getUser() ║
║ [3] 🔮 防御性修复:在findById()中添加空值检查 ║
║ ║
╚══════════════════════════════════════════════════════════════╝

胜利画面

╔══════════════════════════════════════════════════════════════╗
║ ║
║ ⚔️ 胜利!Bug已被斩杀! ⚔️ ║
║ ║
║ Bug:幻影空值(ProfileMapper中的TypeError) ║
║ 根本原因:UserController中错误的解构键

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 dungeon-debug-1776208695 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 dungeon-debug-1776208695 技能

通过命令行安装

skillhub install dungeon-debug-1776208695

下载

⬇ 下载 dungeon-debug v1.0.0(免费)

文件大小: 4.53 KB | 发布时间: 2026-4-15 13:40

v1.0.0 最新 2026-4-15 13:40
Initial release
返回顶部