vscode 无法跳转到函数定义_VS Code 调试完全攻略系列「步进逐行调试」

a92753ed104db06e794429875b8bcff2.png

翻译:疯狂的技术宅

作者:Charles Szilagyi

来源:charlesagile

转发链接:https://mp.weixin.qq.com/s/3mS-S1dmPPb4rS_QTy70pA

前言

在要检查的代码之间跳转很重要。如果去遍历代码的每一行,那将会是乏味且没有必要的。调试器提供了便捷的方法来查看重要的内容,并跳出无关紧要的代码块。让我们看看怎样在调试时进入、跳过和退出函数!

VS Code 调试完全攻略系列目录

  1. VS Code 调试完全攻略系列「基础知识」
  2. 步进逐行调试(本文)
  3. 编辑变量并重新执行函数
  4. launch.json 和调试控制台
  5. 基于浏览器的 React 应用
  6. 调试用 TypeScript 开发并打包的 React

在上一篇VS Code 调试完全攻略系列「基础知识」中,我们研究了 VS Code 调试器,并在代码中添加了断点,还查看了本地状态。

这次,我们将学习如何逐行执行代码以及如何跳入和跳出函数调用。

获取代码

首先,让我们把上次的服务器修改的更加复杂。添加两个额外的函数:一个从请求中获取名称,另一个用于生成问候语。

你可以把下面的代码粘贴到 index.js中。

const http = require('http');const url = require('url');const hostname = '127.0.0.1';const port = 3456;const serverUrl = `http://${hostname}:${port}`const getNameFromReq = (req) => {  const {name} = url.parse(req.url, true).query;  return name}const getGreeting = (name) => {  const greeting = `Hello, ${name}!`  return greeting}const server = http.createServer((req, res) => {  const name = getNameFromReq(req)  const greeting = getGreeting(name)  res.statusCode = 200;  res.setHeader('Content-Type', 'text/plain');  res.end(`${greeting}`);});server.listen(port, hostname, () => {  console.log(`Server running at ${serverUrl}`);});
b89f5e5d01537e55a3155ec09686feb6.png

在VS Code中打开源代码

该系列的代码可在 https://github.com/thekarel/debug-anything 获得

启动调试器

让我们启动调试器:使用调试工具栏或按 F5 并选择 Node.js:

f04d85f34583c3dbe8914d5850e68aba.gif

启动调试器

你应该能够正常访问 http://127.0.0.1:3456/?name=Coco 并看到问候语。

如果你喜欢命令行,也可以用 curl http://127.0.0.1:3456?name=Coco 进行访问。

好的,现在服务器已启动并正常运行,让我们添加一个断点。没有断点,调试器将无法启动:

ec52160721c9784e556fff72868f522e.gif

添加断点

在第 21 行添加一个断点:

const name = getNameFromReq(req)

一步步的调试Step by Step

再次触发对 http://127.0.0.1:3456/?name=Coco 的请求,调试器将被激活并停在第 21 行的代码:

074276c246565a9d5595d48239e4ac64.png

调试器启动

漂亮!现在让我们专注于调试工具栏:

44c8827fd46a0624bcaccabb7ac8aebf.png

调试器工具栏

首先是按钮的名字。从左到右按顺序如下(带有默认的 VS Code 快捷方式):

  • Continue / Pause F5
  • Step Over F10
  • Step Into F11
  • Step Out ⇧F11
  • Restart ⇧⌘F5
  • Stop ⇧F5

Continue、restart 和 stop 很简单,会分别执行你所期望的操作:继续到下一个断点,重新启动进程,以及停止进程(和调试器)。

Step 与当前行上的函数调用相关:你可以单步执行某个函数调用(Step Over),也可以进入该函数调用(Step Into 在内部查看并调试)或者离开这个函数(Step Out)。Step-over 操作还允许你逐行执行代码,即使该行不是函数调用。

Step 命令仅控制你在调试器中看到的内容。所以 “Step Out” 或 “Over” 一个函数将会仍然照常执行所有代码。调试器不会让你感到无聊,你能够更快地完成自己的主要工作。

Continue

Continue 将会运行代码,直到下一个断点或程序结束。一种调试的方法是预先在相关行上添加多个断点,然后用 continue 在它们之间跳转:

22fad10fcb520a6271bdbc5ad18aa8a5.gif

用 Continue 跳至下一个断点

如果你已经知道哪些函数或行与你的目的有关,那么 Continue 操作将非常方便。调试器将在预定义的位置暂停,这时你可以对变量和调用栈进行检查。

Step Over

你可以将 Step Over 看作是在函数中逐行进行,但不进入函数调用。如果你对当前行中的函数调用内部逻辑不感兴趣,而只想查看局部变量如何随时间变化,用它就对了,例如:

b5d2d5627f66edfc2e40b5731919a12e.gif

使用 step over

Step Over 是略过说明性代码的好方法。

Step Into

当某行调用了你感兴趣的函数,并想要更深入地研究时,可以使用 Step Into。一旦进入代码块后,可以像往常一样进行调试(使用 continue、step 等命令)。

观察我们是怎样如何跳过 getNameFromReq,然后进入到 getGreeting 的:

c76fdcb9fbd81723a845956df3033a09.gif

使用 step into

Step Out

Step Out 与 Step In 相反:如果你不再对某个函数感兴趣,可以离开它。使用 “Step out” 将一次运行完该函数的剩余代码。

通过调试检查这两个函数之间的区别,我们逐行执行第一个函数,但是早早的就退出第二个函数:

050e8c027cd29c9e09eee9a6b7f3dc95.gif

使用 step out

现在,你应该对调试器工具栏有了更好的了解,如何着眼于重要的事情并跳过无关的部分。这些命令不仅可以节省你的时间,还可以使整个调试工作变得更加愉快!为什么不在你的项目中试试呢?

推荐VS Code 相关文章

VS Code 调试完全攻略系列「基础知识」

手把手教你如何利用VS Code设置提高编码效率

手把手教你运用VS Code开源新工具调试代码神器

2020必备VS Code 插件-大大提高开发效率(内附 gif 图)

翻译:疯狂的技术宅

作者:Charles Szilagyi

来源:charlesagile

转发链接:https://mp.weixin.qq.com/s/3mS-S1dmPPb4rS_QTy70pA

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值