deno.com
本页内容

代码调试

Deno 支持 Chrome、Edge 和 Node.js 使用的 V8 Inspector 协议。这使得可以使用 Chrome DevTools 或其他支持该协议的客户端(例如 VSCode)调试 Deno 程序。

要激活调试功能,请使用以下标志之一运行 Deno

  • --inspect
  • --inspect-wait
  • --inspect-brk

--inspect 跳转到标题

使用 --inspect 标志将使用 inspector 服务器启动您的程序,该服务器允许来自支持 V8 Inspector 协议的工具的客户端连接,例如 Chrome DevTools。

在 Chromium 派生的浏览器中访问 chrome://inspect 以将 Deno 连接到 inspector 服务器。 这允许您检查您的代码、添加断点并单步执行您的代码。

deno run --inspect your_script.ts

注意

如果您使用 --inspect 标志,代码将立即开始执行。 如果您的程序很短,您可能没有足够的时间在程序完成执行之前连接调试器。

在这种情况下,请尝试使用 --inspect-wait--inspect-brk 标志运行,或者在代码末尾添加超时。

--inspect-wait 跳转到标题

--inspect-wait 标志将等待调试器连接后再执行您的代码。

deno run --inspect-wait your_script.ts

--inspect-brk 跳转到标题

--inspect-brk 标志将等待调试器连接后再执行您的代码,然后在您连接后立即在您的程序中设置一个断点,允许您在恢复执行之前添加额外的断点或评估表达式。

这是最常用的 inspect 标志。 JetBrains 和 VSCode IDE 默认使用此标志。

deno run --inspect-brk your_script.ts

Chrome DevTools 示例 跳转到标题

让我们尝试使用 Chrome Devtools 调试程序。 为此,我们将使用 @std/http/file-server,一个静态文件服务器。

使用 --inspect-brk 标志在第一行中断执行

$ deno run --inspect-brk -RN jsr:@std/http/file-server
Debugger listening on ws://127.0.0.1:9229/ws/1e82c406-85a9-44ab-86b6-7341583480b1
...

在 Chromium 派生的浏览器(如 Google Chrome 或 Microsoft Edge)中,打开 chrome://inspect 并单击目标旁边的 Inspect

chrome://inspect

打开 DevTools 后,可能需要几秒钟才能加载所有模块。

DevTools opened

您可能会注意到 DevTools 在 _constants.ts 的第一行而不是 file_server.ts 上暂停执行。 这是由 ES 模块在 JavaScript 中求值的方式引起的预期行为(_constants.tsfile_server.ts 最左边、最底层的依赖项,因此首先对其进行求值)。

此时,所有源代码都可以在 DevTools 中使用,所以让我们打开 file_server.ts 并在那里添加一个断点; 转到“Sources”窗格并展开树

Open file_server.ts

仔细观察,您会发现每个文件都有重复的条目; 一个是常规书写,另一个是斜体。 前者是编译后的源文件(因此在 .ts 文件的情况下,它将是发出的 JavaScript 源代码),而后者是该文件的源映射。

接下来,在 listenAndServe 方法中添加一个断点

Break in file_server.ts

一旦我们添加了断点,DevTools 会自动打开源映射文件,这允许我们单步执行包含类型的实际源代码。

现在我们已经设置了断点,我们可以恢复脚本的执行,以便我们可以检查传入的请求。 点击“Resume script execution”按钮即可。 您甚至可能需要点击两次!

一旦我们的脚本正在运行,尝试发送一个请求并在 Devtools 中检查它

curl http://0.0.0.0:4507/

Break in request handling

此时,我们可以检查请求的内容,并逐步调试代码。

VSCode 跳转到标题

可以使用 VSCode 调试 Deno。 这最好在官方 vscode_deno 扩展的帮助下完成。 有关此文档,请参见此处

JetBrains IDE 跳转到标题

注意:请确保您已在首选项 / 设置 | 插件中安装并启用了 此 Deno 插件。 有关更多信息,请参见此博客文章

您可以使用 JetBrains IDE 调试 Deno,方法是右键单击要调试的文件,然后选择 Debug 'Deno: <file name>' 选项。

Debug file

这将创建一个没有设置权限标志的运行/调试配置。 如果您想配置它们,请打开您的运行/调试配置并将所需的标志添加到 Command 字段。

--log-level=debug 跳转到标题

如果您在连接到 inspector 时遇到问题,可以使用 --log-level=debug 标志来获取有关正在发生的事情的更多信息。 这将向您显示诸如模块解析、网络请求和其他权限检查之类的信息。

deno run --inspect-brk --log-level=debug your_script.ts

--strace-ops 跳转到标题

Deno ops 是 JavaScript 和 Rust 之间的 RPC 机制。 它们为 JavaScript 提供诸如文件 I/O、网络和计时器之类的功能。 当程序运行时,--strace-ops 标志将打印出 Deno 正在执行的所有 ops 及其计时。

deno run --strace-ops your_script.ts

每个 op 都应该有一个 Dispatch 和一个 Complete 事件。 这两个事件之间的时间是执行 op 所花费的时间。 此标志可用于性能分析、调试挂起的程序或了解 Deno 在底层的工作方式。

您找到所需的内容了吗?

隐私政策