【发布时间】:2018-01-23 05:09:32
【问题描述】:
虽然不限于这种情况,但假设您使用了一个工具,该工具通过调用您提供的代码来公开其 API。比如Gulp,比如。
当它完成它的工作时,这个库会很早就将它的管道封装在......
try {
library.doSomethingWith( input )
}
catch(err){
throw library.prettify(err)
}
当“内部”错误确实发生时(通常在user-land 中引起),它可能会有所帮助,将一些可能更清晰的错误重新抛出到控制台。但是,如果我决定要逐步检查 Chrome DevTools 或首选调试界面中的错误,我不能这样做。这是因为我关心的特定错误已经“崩溃”到 err 中,而重新抛出的 Error{} 有它自己的、无用的、实时的堆栈跟踪。
在某些情况下这是可以的,因为您可以简单地中断所有异常。但是,当使用足够复杂以具有异步行为的库时,存在一个主要缺点。据我所知,您无法过滤掉某些库甚至节点运行时会死记硬背的throw 和catch 的程序错误,字面意思是每个滴答声。
通常情况下,当我暂停捕获的异常时,我会不断地遇到一些变体
try {
throw new Error()
} catch {
//transcend annoyance
}
深埋在核心依赖中。
综上所述,有没有办法在错误被消耗之前拦截catch?虽然我认为这样的功能在主要调试器中不会很容易使用,但 Node Debugger API 中是否有命令或特殊技术可以有效地执行以下操作之一?
- 在运行时退出 try 块,进入 catch 语句之前暂停
- 直接暂停将被带有调试器标记的
try {}捕获的异常 - 在其各自的
catch块内重新生成原始错误的调试状态 - “暂停所有异常”,标记上下文之外或列入黑名单的文件除外
如果可以通过这些方式中的任何一种来定位错误,这将大大提高道德和生产力。
【问题讨论】:
-
虽然我不认为它是这个问题不可或缺的一部分,但当我调试和测试我自己的转换时,它是 Babel,我正面临这个问题
标签: javascript node.js debugging