我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用debugger来调试代码的原因是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用debugger来调试代码的原因是什么

这篇文章主要介绍了使用debugger来调试代码的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇使用debugger来调试代码的原因是什么文章都会有所收获,下面我们一起来看看吧。

console.log vs Debugger

相信绝大多数同学使用 console.log 调试的,把想看的变量值打印在控制台。

这样能满足需求,但是遇到对象的打印就不行了。

比如我想看 webpack 源码里的 compilation 对象的值,我打印了一下:

使用debugger来调试代码的原因是什么

但你会发现对象的值也是对象的时候不会展开,而是打印一个 [Object] [Array] 这种字符串。

更致命的是打印的太长会超过缓冲区的大小,terminal 里会显示不全:

使用debugger来调试代码的原因是什么

而你用 debugger 来跑,在这里打个断点来看就没这些问题了:

使用debugger来调试代码的原因是什么

有的同学可能会说,那打印一个简单的值的时候用 console.log 还是很方便呀。

比如这样:

使用debugger来调试代码的原因是什么

真的么?

那还不如用 logpoint:

使用debugger来调试代码的原因是什么

使用debugger来调试代码的原因是什么

代码执行到这里就会打印:

使用debugger来调试代码的原因是什么

而且没有污染代码,用 console.log 的话调试完之后这个 console 不也得删掉么?

但是 logpoint 不用,它就是个断点的设置,不在代码里。

当然,最重要的是 Debugger 调试是可以看到调用栈和作用域的!

首先是调用栈,它就是代码的执行路线。

比如这个 App 的函数组件,你可以看到渲染这个函数组件会经历 workLoop、beginWork、renderWithHooks 这些流程:

使用debugger来调试代码的原因是什么

你可以点开调用栈的每一帧看下都执行了啥逻辑,用到啥数据。比如可以看到这个函数组件的 fiber 节点:

使用debugger来调试代码的原因是什么

再就是作用域,点击每一个栈帧就可以看到每个函数的作用域中的变量:

使用debugger来调试代码的原因是什么

用 Debugger 可以看到代码的执行路径,每一步的作用域信息。而你用 console.log 呢?

只能看到那个变量值而已。

拿到的信息量的差距不是一点半点,调试时间长了,别人会对代码的运行流程越来越清晰,而你用 console.log 呢?还是老样子,因为你看不到代码执行路径。

所以,不管是调试库的源码还是业务代码,不管是调试 Node.js 还是网页,都推荐用 Debugger 打断点,别再用 console.log 了,就算想打印日志,也可以用 LogPoint。

而且在排查问题的时候,用 Debugger 的话可以加一个异常断点,代码跑到抛异常的地方就会断住:

使用debugger来调试代码的原因是什么

使用debugger来调试代码的原因是什么

可以看到调用栈来理清出错前都走了哪些代码,可以通过作用域来看到每一个变量的值。

有了这些东西,排查错误不就很轻松了么!

而你用 console.log 呢?

啥也没,只能自己猜。

Performance

前面说 Debugger 调试可以看到一条代码的执行路径,但是代码的执行路径往往比较曲折。

比如那个 React 会对每个 fiber 节点做处理,每个节点都会调用 beginWork。处理完之后又会处理下一个节点,再次调用 beginWork:

使用debugger来调试代码的原因是什么

就像你走了一条小路,然后回到大路之后又走了另一条小路,用 Debugger 只能看到当前这条小路的执行路径,看不到其他小路的路径:

使用debugger来调试代码的原因是什么

这时候就可以结合 Performance 工具了,用 Performance 工具看到代码执行的全貌,然后用 Debugger 来深入每一条代码执行路径的细节。

使用debugger来调试代码的原因是什么

SourceMap

sourcemap 很重要,因为我们执行过的都是编译打包后的代码,基本是不可读的,调试这种代码也没啥意义,而 sourcemap 就可以让我们直接调试最初的源码。

使用debugger来调试代码的原因是什么

比如 vue,关联了 sourcemap 之后,我们能直接调试 ts 源码:

使用debugger来调试代码的原因是什么

nest.js 也是:

使用debugger来调试代码的原因是什么

不用 sourcemap 的话,想搞懂源码,但你调试的是编译后的代码,怎么读懂呢?

读懂一行

前面说的 Debugger、Performance、SourceMap 只是调试代码的工具,那会了调试工具,依然读不懂代码怎么办呢?

我觉得这是不可能的。

为什么这么说呢?

就拿 react 源码来说:

使用debugger来调试代码的原因是什么

关于“使用debugger来调试代码的原因是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“使用debugger来调试代码的原因是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用debugger来调试代码的原因是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用debugger来调试代码的原因是什么

这篇文章主要介绍了使用debugger来调试代码的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇使用debugger来调试代码的原因是什么文章都会有所收获,下面我们一起来看看吧。console.log
2023-07-04

为什么要用debugger来调试代码?这样你能读懂各种源码!

​很多同学不知道为什么要用 debugger 来调试,console.log 不行么?还有,会用 debugger 了,还是有很多代码看不懂,如何调试复杂源码呢?这篇文章就来讲一下为什么要用debugger来调试代码?
2023-05-14

Python代码调试的方法是什么

这篇文章主要介绍“Python代码调试的方法是什么”,在日常操作中,相信很多人在Python代码调试的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python代码调试的方法是什么”的疑惑有所帮助!
2023-06-02

使用http代理总是掉线的原因是什么

这篇文章主要讲解了“使用http代理总是掉线的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用http代理总是掉线的原因是什么”吧!1、同一个IP挂的软件太多了。例如一台电脑有十
2023-06-20

apache调用不起来php5.6的原因和解决方法是什么

这篇文章主要介绍“apache调用不起来php5.6的原因和解决方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“apache调用不起来php5.6的原因和解决方法是什么”文章能帮助大家解决问
2023-07-05

爬虫使用动态ip代理的原因是什么

本篇内容介绍了“爬虫使用动态ip代理的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代理ip有那么多种,为什么爬虫都用动态ip代理
2023-06-20

使用代理IP不能上网的原因是什么

这篇文章主要讲解了“使用代理IP不能上网的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用代理IP不能上网的原因是什么”吧!大概大家对代理IP并不陌生,特别是因特网工作者,经常需
2023-06-20

使用 WaitGroups 和 Buffered Channels 的 Go 代码中出现死锁的原因是什么?

php小编百草在这篇文章中将解答一个常见问题:“使用 WaitGroups 和 Buffered Channels 的 Go 代码中出现死锁的原因是什么?”在Go语言中,WaitGroups和Buffered Channels是常用的并发编
使用 WaitGroups 和 Buffered Channels 的 Go 代码中出现死锁的原因是什么?
2024-02-09

PHP代码提交失败?可能是无法调用commit的原因

PHP代码提交失败可能是由于无法调用commit的原因,这可能是因为提交代码时出现了一些问题。在PHP中使用Git提交代码是一种常见的操作,但有时候可能会出现调用commit失败的情况。以下是一些可能导致提交失败的原因以及具体代码示例。一
PHP代码提交失败?可能是无法调用commit的原因
2024-03-05

PHP CLI应用的调试原理是什么

PHP CLI应用的调试原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们在Eclipse里选中一个PHP文件,右键选择Debug As->PHP C
2023-06-04

go语言以包组织代码的原因是什么

这篇文章主要介绍了go语言以包组织代码的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言以包组织代码的原因是什么文章都会有所收获,下面我们一起来看看吧。原因:将程序所有的代码都放入一个源码文件是
2023-07-04

es6中class继承调用super的原因是什么

本文小编为大家详细介绍“es6中class继承调用super的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“es6中class继承调用super的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-04

Python使用pytest playwright的原因是什么

这篇文章主要介绍了Python使用pytest playwright的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python使用pytest playwright的原因是什么文章都会有所收获,下面
2023-07-05

网络代理服务器无法使用的原因是什么

这篇文章主要介绍“网络代理服务器无法使用的原因是什么”,在日常操作中,相信很多人在网络代理服务器无法使用的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”网络代理服务器无法使用的原因是什么”的疑惑有所
2023-06-25

更新使用HTTP代理出现延迟的原因是什么

这篇文章主要讲解了“更新使用HTTP代理出现延迟的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“更新使用HTTP代理出现延迟的原因是什么”吧!为何代理IP会有延迟?在使用http之
2023-06-20

Vue框架使用PostCSS的原因是什么

本篇内容介绍了“Vue框架使用PostCSS的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用PostCss的原因大家都知道转换
2023-06-20

用代理ip获取信息的原因是什么

本篇内容介绍了“用代理ip获取信息的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、为了防止黑客,我们必须用科学的方法隐藏IP地
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录