# 调试: 用于发现和解决问题

# 內省

# 显式异常

一些明确由throw关键词触发的异常抛出称为显式异常。显式异常通常由try catch块处理。

# 隐式异常

在运行时不由throw关键字触发的异常。比如拼写错误引用了未声明的变量,通过lint工具可以在开发阶段找到许多这类问题。

# 错误事件

在node中,错误事件可以在任意继承EventEmitter的对象触发( emit('error') ),如果没有相应的处理,Node会抛出错误异常。所以,要尽可能绑定错误处理事件。

# 错误参数

在node中,异步操作发生的错误通常会作为回调函数的第一个参数传递过去。这个参数最好要处理,比如用一个统一的处理函数,避免引发其他错误。

# 技巧88 处理未捕获的异常

当程序抛出未处理的异常的时候,Node默认会终止程序的执行,可以在process对象上设置未捕获异常的处理函数

process.on('uncaughtException',(err)=>{
    console.log(err);
})

这样不会终止程序进行,但是其实掩盖了错误,更好的做法是在uncaughtException回调中打印日志,然后把应用退出,等待重启。

# 技巧89 检查我们的Node代码

使用eslint代码检查工具

# 问题的调试

# 技巧90 使用Node内置的调试器

使用node debug

# 技巧91 使用Node Inspector

node-inspector是一个第三方模块,可以把调试信息从Node拿出来,放到Chrome开发者工具中

# 技巧92 对Node应用进行性能分析

使用 node --prof 统计代码开销时间

# 技巧93 内存泄漏的调整

使用process.memoryUsage()查询内存使用