前言
Deno 是一个近期比较火热的 JavaScript / TypeScript 运行环境,它通过 V8 引擎执行代码,和 Node.js 不同,Deno 采用了安全沙箱机制,脱离 npm,不再需要 package.json 等配置文件,也不依赖全局安装的 Node.js。Deno 从一开始就内置了 TypeScript 支持,使用起来十分方便。
然而,当我们出现问题时,如何在 Deno 中进行调试呢?本文将详细介绍 Deno 的调试方式,并为大家提供实用的指导意义和示例代码。
目录
- Deno 调试方式
- 具体调试流程
- 实例演示
Deno 调试方式
Deno 默认支持 Chrome 开发者工具进行调试,类似于浏览器中的开发者工具,在代码中插入 debugger;
即可暂停程序运行并打开调试器。
值得注意的是,Deno 中的 debugger;
语句只能停止当前文件的执行,无法停止子模块的执行。也就是说,如果你的代码中调用了其他模块(模块 A 调用了模块 B),在模块 A 中插入 debugger;
无法在模块 B 中暂停程序执行。你需要进入模块 B 中插入 debugger;
来调试模块 B。
此外,Deno 还提供了 --inspect
标志来运行脚本,并启用 Chrome 开发者工具的远程调试功能。
具体调试流程
接下来,我们以一个简单的示例来演示具体的调试流程。
创建一个简单的文件
我们首先创建一个简单的 TypeScript 文件 index.ts
:
-------- ------ ------- -- -------- ------ - ------ - - -- - ------------------ ----
该文件仅仅是定义了一个简单的函数,然后输出函数的调用结果。
插入 debugger;
调试语句
为了利用 Chrome 开发者工具进行调试,我们在 index.ts
文件中插入 debugger;
语句:
-------- ------ ------- -- -------- ------ - --------- ------ - - -- - ------------------ ----
运行脚本并启用远程调试
在命令行中,我们运行如下命令来使用 --inspect
标志启用远程调试:
---- --- --------- --------
Deno 将会在默认的 127.0.0.1:9229 上启动一个调试服务器,并监听该地址上的请求。
打开 Chrome 开发者工具
在 Chrome 中打开 chrome://inspect
页面,并点击 Open dedicated DevTools for Node
。
你会看到 DevTools 弹窗提示需要配置 Remote Target
,点击 Configure
配置端口和远程地址。
配置完成后,你就可以在 DevTools 中看到你的脚本运行的具体信息,并进行调试。
实例演示
上面我们已经演示了 Deno 的具体调试流程,下面我们看一个真实的调试例子。
考虑如下代码,我们要使用 Deno 进行调试:
-- ------- ------ -------- ------ ------- -- -------- ------ - ------ - - -- - ------ -------- ----------- ------- -- -------- ------ - ------ - - -- -
-- -------- ------ - --- - ---- ------------ ------------------ ----
在 index.ts
中,我们只使用了 add
函数。现在我们要在 add
函数中插入 debugger;
语句进行调试。
我们首先需要修改 index.ts
文件:
------ - --- - ---- ------------ --------- ------------------ ----
然后在命令行输入如下命令:
---- --- --------- --------
最后在 Chrome 开发者工具中进行调试即可。在代码中插入 debugger;
将会暂停程序的执行,你可以在这个时候观察变量的值,继续执行程序等。通过这种方式,可以更加方便地进行调试。
结论
本文详细介绍了 Deno 的调试方式,使用 debugger;
语句可以让我们更加方便地进行调试。此外,Deno 还提供了 --inspect
标志,帮助我们启用 Chrome 开发者工具的远程调试功能,更加方便我们进行调试。
当然,调试一定是针对具体场景的,如果你有更复杂的调试需求,可以访问 Deno 中文官网 寻求更多帮助和支持。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67051c80d91dce0dc851dced