JavaScript 调试权威指南 [2021 版]
介绍
我们今天要调试什么?
了解来源面板
设置断点
逐步执行源代码
检查范围、调用堆栈和值
让我们一起观看
禁用和删除断点
最后,修复
使用 Visual Studio Code 调试 JavaScript
了解调试器面板
快速演示
概括
介绍
作为开发人员,我们传统上会使用有意义的语句来根除程序中的错误(bugs如果可以的话,以后我们会调用它们)log。JavaScript 有一个著名的console.log()方法可以做到这一点。
虽然日志语句很好,但它们的效率不如能够逐步调试的工具。因此,在本文中,我们将学习如何使用Google Chrome developer tools(也称为DevTools)轻松调试任何 JavaScript 应用程序。
使用 DevTools 的一大优势在于,其他浏览器厂商(例如 Firefox 和 Microsoft)也提供了各自的 JavaScript 应用调试工具,并且这些工具的工作方式也类似。因此,一旦我们学会了如何在一个浏览器上使用调试工具,在另一个浏览器上使用也同样简单。
我们今天要调试什么?
看看这个Greet Me应用程序。这个 JavaScript 应用程序会询问您的姓名,并邀请您提交一个“愿望”,以便向您发送个性化的问候。
但是等等,这里有个问题。问候信息没有正确打印愿望部分。它插入了一个乱码单词 。NaN还好,Chrome DevTools 可以帮助我们识别这个问题。
如果您想尝试以下提供的技巧,可以在https://greet-me-debugging.vercel.app/找到 Greet Me 应用程序。您也可以从 GitHub 克隆应用程序代码并在本地运行。
了解来源面板
DevTools提供了许多不同的工具来执行调试任务,包括 DOM 检查、性能分析和网络调用检查。但我们现在感兴趣的是面板Sources,它可以帮助我们调试 JavaScript。
您可以通过按下F12键或使用快捷键打开 DevTools:Control+Shift+I(Windows、Linux)或 Command+Option+I(Mac)。点击Sources标签页即可导航至Sources面板。
该Sources面板有三个主要部分。
File Navigator Section:我们的“欢迎我”页面请求的所有文件都列在这里。Code Editor Section:当您从导航窗格中选择一个文件时,该文件的内容将在此处列出。我们也可以从这里编辑代码。Debugger Section:您将在这里找到许多可用于设置断点、检查变量值、观察变化等的工具。
如果您的 DevTools 窗口很宽或在单独的窗口中未停靠,则调试器部分将显示在代码编辑器窗格的右侧。
设置断点
要开始调试,首先要做的是设置breakpoints。
断点是您希望代码执行暂停的逻辑点,以便您可以对其进行调试。
DevTools允许你以多种不同的方式设置断点。当我们开始调试应用程序时,我们将学习如何设置它们……
- 在代码行。
- 在条件语句中。
- 在 DOM 节点处。
- 关于事件监听器。
在代码行设置断点
要设置代码行断点:
- 单击“源”选项卡。
- 从文件导航部分浏览源文件。
- 转到右侧代码编辑器部分中的代码行。
- 点击行号列可以在某一行设置断点。
这里我们在第 6 行设置了一个断点。代码执行将在这里暂停。
Tips:当您不知道要调查的代码的确切区域时,请使用此选项。即使您只是根据猜测从某个地方开始,最终也会导致错误。您还可以设置多个代码行断点并进行调查。我们将在本文的后半部分看到这一点。
设置条件断点
设置条件断点:
- 单击“源”选项卡。
- 从文件导航部分浏览源文件。
- 转到右侧代码编辑器部分中的代码行。
- 右键单击行号并选择添加条件断点选项。
- 代码行下方会出现一个对话框。开始输入条件。输入过程中,您会看到自动完成选项,提示您选择一个条件。
- 按 Enter 键激活断点。你应该会看到行号列顶部出现一个橙色图标。
print()每当使用名称调用该函数时,代码执行都会暂停Joe。
提示:当您知道需要调查的具体代码区域时,请使用条件断点。由于您可能知道代码区域,因此您可以使用条件进一步检查以找出问题的根本原因。
在事件监听器上设置断点
要在事件侦听器上设置断点:
- 单击该
Sources选项卡。 - 展开
Event Listener Breakpoints窗格debugger section。 - 从类别列表中选择事件监听器列表来设置断点。我们的应用程序中有一个按钮点击事件。我们将尝试选中选项
click下方的复选框mouse。
提示:当您想要暂停事件触发后运行的事件监听器代码时使用此功能。
在 DOM 节点设置断点
DevTools在 DOM 检查和调试方面同样强大。您可以设置断点,以便在 DOM 中添加、删除或更改某些内容时暂停代码执行。
要在 DOM 更改时设置断点:
- 单击该
Elements选项卡。 - 转到要设置断点的元素。
- 右键单击元素以获取上下文菜单。选择,然后选择、或
Break on之一。Subtree modificationsAttribute modificationsNode removal
如上图所示,我们在输出 DIV 的 DOM 变化处设置了一个断点,并设置了Subtree修改条件。我们知道,一条问候消息将被添加到输出 DIV 中,并且子树将被修改以在此情况下中断。
提示:当您怀疑 DOM 更改导致了错误时,请使用此选项。当 DOM 更改导致 JavaScript 代码执行中断时,相关的 JavaScript 代码执行将自动暂停。
逐步执行源代码
现在我们已经了解了设置断点的所有重要方法。在复杂的调试情况下,你可能需要组合使用它们。让我们看看如何单步执行断点来解决问题。
调试器部分提供了五个控件来逐步执行代码。
步骤(快捷键 - F9)
此选项允许您在 JavaScript 代码执行时逐行单步执行。如果执行过程中有函数调用,单步执行还会进入函数内部,逐行执行,然后跳出函数。
跨过(快捷键 - F10)
此选项允许您在不进入函数的情况下执行该函数。有时,您可能确定某些函数运行正常,但不想花时间检查它们。在这种情况下,您应该使用step over。
在下面的例子中,我们正在跨过该logger()函数。
进入(快捷键 - F11)
使用此选项可以更深入地调查某个函数。单步执行时,您可能会感觉到某个函数的行为异常,并想要对其进行检查。使用此选项step into可以深入函数内部并进行调试。
在下面的例子中,我们正在进入函数logger()。
退出(快捷键 - Shift + F11)
单步执行某个函数时,您可能不想继续执行并退出该函数。使用此选项可以单步执行该函数。
在下面的例子中,我们进入logger()函数内部,然后立即退出。
恢复/跳转(快捷键 - F8)
有时,您可能希望从一个断点跳转到另一个断点,而不调试其间的任何代码。使用此选项可以跳转到下一个断点。
检查范围、调用堆栈和值
当您逐步调试这些行时,您可以检查变量的范围和值以及函数调用的调用堆栈。
范围
你可以通过面板来查看全局作用域中的内容及其变量scope。你还可以查看关键字的值this。
调用堆栈
调用堆栈面板有助于识别函数执行堆栈。
价值观
检查值是识别代码错误的主要方法。单步执行时,只需将鼠标悬停在变量上即可检查值。
在下面的示例中,我们选择变量name来在代码执行阶段检查其值。
此外,您还可以选择一段代码作为表达式来检查其值。在下面的示例中,我们选择了一个表达式document.getElementById('m_wish')来检查其值。
让我们一起观看
该Watch部分允许您添加一个或多个表达式并在执行时观察它们的值。当您想在代码逻辑之外进行一些计算时,此功能非常有用。
您可以组合代码区域中的任意变量,并形成有效的 JavaScript 表达式。在单步执行时,您将能够看到表达式的值。
以下是添加监视所需的步骤:
- 点击“观看”部分上方的 + 图标
- 添加要监视的表达式。在此示例中,我们添加了一个变量,希望监视其值。
另一种监视表达式的方法是通过控制台抽屉。请参阅下面的示例以了解如何激活它。
禁用和删除断点
要一次禁用所有断点,请单击“停用断点”按钮(如下图所示)。
请注意,上述方法不会移除断点,只是会在您需要的时长内停用它们。要激活断点breakpoints,请再次点击同一按钮。
您可以通过取消选中“断点”面板中的复选框来移除一个或多个断点。右键单击并选择选项,即可永久移除所有断点Remove all breakpoints。
最后,修复
综上所述,你认为该如何修复才能让Greet Me应用正常运行呢?你已经找到解决办法了吗?
如果没有,它只是在构造时在变量+前面添加的额外内容。wishmessage
// This is the line where the issue is.
// Identify the extra '+' before the wish.
const message = 'Hello '
+ name
+ ', Your wish `'
+ + wish
+ '` may come true!';
在实际的调试场景中,我们该如何找到这个方法呢?可以看看这个简短的视频演示(无音频)。
JS 调试:修复“Greet Me”应用
您也可以从这里试用修复后的版本。
使用 Visual Studio Code 调试 JavaScript
你最喜欢的代码编辑器是什么?我个人喜欢 Visual Studio Code,因为它简单易用。我们只需几个简单的步骤,就可以使用 VS Code 启用类似的调试环境。
用于调试的 VS Code 设置
VS Code 有多个扩展程序(类似插件),可用于启用各种特性和功能。要启用 JavaScript 调试,您需要安装一个名为 的扩展程序Debugger for Chrome。您可以通过以下任一方式安装它:
- 前往Chrome 调试器主页,然后点击“安装”按钮。这将启动 VS Code 并自动开始安装。
- 您可以在 VS Code 的扩展面板中搜索此扩展并安装它。
- 安装后,单击左侧的运行选项并创建配置以运行/调试 JavaScript 应用程序。
- 将会创建一个名为 launch.json 的文件,其中包含一些设置信息。它可能如下所示:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: <https://go.microsoft.com/fwlink/?linkid=830387>
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Debug the Greet Me app",
"url": "<http://localhost:5500>",
"webRoot": "${workspaceFolder}"
}
]
}
您可能需要更改以下参数:
- name:任何适合您的应用的名称。可以选择更改。
- url:您的应用程序在本地运行的 URL。
- webRoot:默认情况下,值为 ${workspaceFolder},即当前文件夹。您可能需要将其更改为 index.html 等文件所在的入口点文件夹。
- 最后一步是单击左上角的小播放图标开始调试。
了解调试器面板
VS Code 提供了类似的 JavaScript 调试工具DevTools。您会发现它与我们之前在本文中介绍的 Google Chrome JavaScript 调试器有很多相似之处。以下是您应该了解的主要部分:
- 启用调试。按下播放按钮启用调试选项。
- 用于单步执行断点以及暂停或停止调试的控件。这与我们在 Chrome DevTools 中看到的控件几乎类似,只是某些键盘快捷键可能有所不同。
- 在源代码上设置断点。这类似。
- 作用域面板用于查看变量的作用域和值。这两种情况下,它们完全相同。
- 用于创建和观看表情的观看面板。
- 执行函数的调用堆栈。
- 要启用、禁用和删除的断点列表。
- 调试控制台用于读取控制台日志消息。
快速演示
这是一个快速演示(1 分钟)来展示 VS Code 调试控制用法。
VS Code 调试
概括
总而言之,
- 使用工具来调试 JavaScript 代码总是更好的选择。像 Google Chrome
DevTools或VS Code调试器扩展程序这样的工具比仅仅依赖console.log(). - DevTools
Source Panel功能非常强大,具有检查变量值、监视表达式、了解范围、读取调用堆栈等功能。 - 设置方法有多种
breakpoints,需要根据调试情况来使用。 - 使用 管理断点很简单
DevTools。 - 该
VS Code debugger扩展同样功能强大,值得尝试。
就到这里吧。非常感谢你的阅读,希望这篇文章对你有所帮助。祝你调试愉快!欢迎在Twitter 上与我联系(@tapasadhikary)。
文章来源:https://dev.to/atapas/the-definitive-guide-to-javascript-debugging-2021-edition-116n
后端开发教程 - Java、Spring Boot 实战 - msg200.com




























