关闭

调试 node.js 程序

时间: 2020-02-03阅读: 540标签: 调试

在程序开发中,如何快速的查找定位问题是一项非常重要的基本功。在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作。这里简单介绍下如何调试 node.js 程序。


使用 console.log

Node 提供了全局的 console 对象,该对象可以输出格式化的字符串。

console.log 是调试 Node 模块最简单的工具,console.log 主要有两个作用:一是将对象序列化为一个字符串,另一个是向标准输出流输出结果。

使用 console.log 检查对象:

const obj = {
  a: 1,
  b: 2
}

console.log(obj)

这段代码将打印出以下信息:

{ a: 1, b: 2 }

注意:实质上 console.log 没有进行任何格式化操作,而是 console.log 内部调用了 util.format 将传入的参数格式化,并且将结果输出到标准输出流中。

console.log 函数只检查对象的自有可枚举属性,即在原型链上的属性以及不可枚举的属性都不会显示。

例如:

const obj = Object.defineProperty({
  a: 1,
  b: 2
}, 'a', {
  enumerable: false
})

console.log(obj)

不可枚举属性 a 不会显示,这段代码将打印出以下信息:

{ b: 2 }

console.log 函数可以通过 util.format 函数提供向字符串中插入数值的能力,在字符串中使用 % 前缀作占位符。

例如:

console.log('an object: %j', {a: 1, b: 2})

这段代码将打印出以下信息:

an object: {"a":1,"b":2}

%j 是一个 jsON 占位符。即如果参数包含循环引用,则替换为字符串 ‘[Circular]’。

当然除了 console.log 函数,还可以使用 console 对象的其他函数调试代码,例如:console.error、console.table、console.info等等。

注意:在 Node 中,如果向进程的输出流中写入数据是一种阻塞操作,写入记录时会阻塞事件循坏。因此,在实际项目中应避免使用 console.log。


使用 debugger 调试器

使用 console.log 检查变量虽然简单易用,但它也有很糟糕的一面,在复杂程序中很难定位和发现问题,程序输出冗长,阻塞事件循环等。

庆幸的是,V8 引擎导出了一个支持 Node 的调试接口。因此,可以使用 Node 内置的调试器调试你的程序。

创建一个错误的程序:

var n = 0

function init () {
  n = 1
}

function incr () {
  var n = n + 1
}

init()
console.log('n before: %d', n)

incr()
console.log('n after: %d', n)

运行程序,输出结果如下:

n before: 1
n after: 1

变量 n 并没有如期递增,接下来使用调试模式启动 Node 调试程序:

node --inspect index.js

这样就会以调试模式启动 Node,可以看到调试器的提示信息如下:

Debugger listening on ws://127.0.0.1:9229/a94b1d29-81cb-461b-8abc-f1bf87c767b1
For help, see: https://nodejs.org/en/docs/inspector
n before: 1
n after: 1

调试的程序代码非常少,所以调试立即就完成结束了。

可以通过命令在程序第一行设置断点:

node --inspect-brk index.js

调试器提示信息如下:

Debugger listening on ws://127.0.0.1:9229/def735ed-3a2a-4772-a40d-077939e76b83
For help, see: https://nodejs.org/en/docs/inspector

这样调试就不会立即结束。

接着,打开 Chrome 浏览器,在地址栏输入:

chrome://inspect/#devices

在界面 Remote Target 标签内容中找到要调试的目标(Target)文件,点击目标中的 inspect 链接就可以进入浏览器调试面板调试程序了。接下来的调试操作方式和平时调试普通 JavaScript 代码一样。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/8509

关闭

Flutter 应用调试

程序调试是程序投入运行之前,使用手工或编译程序等方法进行的测试,主要用以修正语法错误和逻辑错误。程序调试是保证计算机信息系统正确性的必不可少的步骤,在Flutter应用开发中,Android Studio和VSCode是两种比较常见的集成开发环境

是时候抛弃Postman了,试试 VS Code 自带神器插件

接口调试是每一个软件开发从业者必不可少的一项技能,一个项目的完成必然经过大量的接口测试,实际开发过程中,接口调试的时间不比实际开发所用的时间少。作为前端开发人员

使用 tap 来快速 debug

在这里 tap 是一个可以用来快速调试、链式调用、匿名函数,还可以打印任何你想打印的东西的函数。为什么我们不用 console.log 这个老方式了?

如何调试javascript代码?

有时代码可能会包含某些错误。而作为脚本语言,JavaScript无法在浏览器中显示任何错误消息。但是,这些错误却会影响输出。找出这些错误的最佳做法就是调试代码。我们可以使用内置的Web浏览器调试器来轻松调试代码

10个用Console来Debug的高级技巧

在过去的十年中,我最热衷的事情之一就是前端开发(特别是JavaScript)。作为一个匠人,我喜欢专研各种工具。在本文,我会为你介绍一些用老式console来debug的技巧。

JS断点调试,必备的javaScript的debug调试技巧

断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下罢了。本文主要介绍了“逐语句执行”按钮、“逐过程执行”按钮、console控制台这三个工具,以及调试bug时的一些思路。

chrome的F12调试刷新或者内部跳转network日志消失的解决办法

开发者工具的Network面板中面有一个Preserve Log选项,勾选上即可,如果没有勾选,跳转页面或者刷新页面,之前的http请求日志都会被清空,勾选上,就会保留所有的日志信息。

javascript怎样调试代码?

查找编程代码中的错误被称为代码调试。调试并不简单。但幸运地是,所有现代浏览器都有内置的调试器。内置的调试器可打开或关闭,强制将错误报告给用户。

移动端调试工具推荐

vConsole腾讯出品的 Web 调试面板,相信不少前端小伙伴都用过。Charles 是一款强大的抓包工具,可以截取包括 https 在内的各种网络请求并方便的查看具体信息。weinre是一款很不错的网页检查工具,可以通过在本地启动一个 weinre 服务

VSCode调试网页JavaScript代码

调试准备,安装插件:Chrome,安装方法:Debug -> Install Additional Debuggers... -> Debugger for Chrome,重新启动vscode即可。首先该插件运行需要安装有本地服务器,其次有两种配置方式

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!