# 代码调试(一)：认识 Debug 模式

在开发过程中，Bug 是我们最好的朋友（也是最可恶的敌人）。**Debug 模式** 是 ArenaPro 提供给你的最强大的“侦探工具”，它能帮你掀开代码的“引擎盖”，看清楚内部到底发生了什么，从而快速定位并解决问题。

## 为什么需要 Debug 模式？

默认情况下，当你构建项目时，ArenaPro 会对代码进行**压缩和混淆**。这就像是为了让汽车跑得更快而把它封装在一个光滑的、无法打开的外壳里。这样做的好处是代码体积小、运行效率高，适合正式发布。

但当车子出故障时，这个打不开的外壳就成了噩梦。

- **生产模式 (Debug 关闭)**：代码被压缩成一行天书，变量名变成了`a`, `b`, `c`。如果报错，你很难知道是哪一行源码出了问题。
- **Debug 模式 (Debug 开启)**：代码保持着你编写时的样子，保留了所有的空格、换行和变量名。如果报错，它会精确地告诉你：“嘿，你写的第 52 行 `playerScore` 这个变量出错了！”

| 模式           | 代码特点               | 优点                 | 缺点               |
| -------------- | ---------------------- | -------------------- | ------------------ |
| 生产模式       | 压缩、混淆、不可读     | **运行效率高**、安全 | 难以调试           |
| **Debug 模式** | **保持原样、完全可读** | **易于调试**         | 运行效率低、不安全 |

两种工作流程的区别可以总结为下图：

![](/QQ20250709-210521.png)

## 如何开启 Debug 模式？

开启 Debug 模式非常简单，只需一步配置：

1.  打开项目根目录下的 `dao3.config.json` 文件。
2.  找到 `typescript` 配置节，将 `development` 字段设置为 `true`。

```jsonc
// dao3.config.json
{
  "ArenaPro": {
    "file": {
      "typescript": {
        // "server" 和 "client" 分别控制服务端和客户端
        "server": {
          "development": true // true: 开启服务端 Debug 模式
        },
        "client": {
          "development": true // true: 开启客户端 Debug 模式
        }
      }
    }
  }
}
```

:::info
**💡 重要提示**
修改配置后，**必须重新构建项目** (`Alt + Q`)，新的模式才会生效。
:::

## 一个典型的调试工作流

假设你在游戏中发现了一个 Bug，可以按照以下流程来解决它：

1.  **开启 Debug 模式**：修改 `dao3.config.json` 并保存。
2.  **重新构建**：按下 `Alt + Q`，将可读的代码上传到地图。
3.  **复现 Bug**：进入游戏，操作并触发这个 Bug。
4.  **查看控制台**：打开游戏控制台，此时你会看到一条非常详细的报错信息，通常会精确到源码的文件名和行号。
5.  **定位并修复**：根据错误信息，回到 VS Code 中修改你的 TypeScript 源码。
6.  **关闭 Debug 模式**：Bug 修复后，记得将 `development` 改回 `false`，再构建一次用于最终测试或发布。

## 常见问题 (Q&A)

**Q: 我应该一直开启 Debug 模式吗？**

**A:** 不。Debug 模式仅用于**开发和调试阶段**。因为它生成的代码体积大、未优化，会影响游戏性能。请在**发布游戏前务必将其关闭**。

**Q: `developmentAll` 这个配置是做什么的？**

**A:** 这是一个快捷开关。如果你将 `developmentAll` 设置为 `true`，它会强制同时开启服务端和客户端的 Debug 模式，忽略 `server` 和 `client` 下的单独设置。通常情况下，你不需要使用它。

**Q: 我可以直接修改 `dist` 文件夹里编译后的 JS 文件来调试吗？**

**A:** 强烈不建议。你应该始终修改 `*.ts` 源码，然后通过构建流程来更新代码。直接修改编译产物会导致源码和运行代码不一致，造成更大的混乱。

理解这两种模式的差异，是高效开发和高质量交付的基础。在下一节，我们将学习如何利用 HMR（热模块替换）来进一步提升开发效率。
<br/>
<br/>
<br/>

## 常见问题

<details>

</details>
