一、捕捉堆栈的时机
Node.js中捕捉堆栈只有在new Error()时会进行自动捕捉。初始化Error实例时调用Error.captureStackTrace(this),为实例捕捉堆栈并格式化成字符串塞进实例的stack属性中。
参考:http://nodejs.cn/api/errors.html#errors_error_capturestacktrace_targetobject_constructoropt
二、如何不通过new Error()捕捉当前调用堆栈?
const obj = Object.create(null); // 初始化一个空对象 Error.captureStackTrace(obj); // 捕捉堆栈并塞入obj.stack属性中 obj.stack; // 直接访问即可获取堆栈
三、自定义堆栈格式
默认情况下v8内置了堆栈的格式化函数Error.prepareStackTrace(),和堆栈的层级捕捉限制Error.stackTraceLimit。我们如果想定制stack的内容,只要替换这两个v8内置的方法即可:
/** * Capture call site stack from v8. * https://v8.dev/docs/stack-trace-api */ function myPrepareStackTrace(obj, stack) { // do something stack format. // ... return stack; } // 替换内置stackTraceLimit、prepareStackTrace const limit = Error.stackTraceLimit; const prep = Error.prepareStackTrace; Error.prepareStackTrace = myPrepareStackTrace; // 替换成我们自定义方法 Error.stackTraceLimit = 4; // 只捕捉前4层堆栈 // 捕捉放入空对象 const obj = Object.create(null); Error.captureStackTrace(obj); obj.stack; // 获得自定义堆栈 // 还原内置stackTraceLimit、prepareStackTrace Error.prepareStackTrace = prep; Error.stackTraceLimit = limit;
另外,myPrepareStackTrace中的stack参数是原始堆栈信息,其结构是一个包含stackTraceLimit个CallSite对象的数组,CallSite拥有丰富的api可以获取每一个堆栈站点的详细信息如:getFileName()、getLineNumber()、getColumnNumber()等。
参考:https://v8.dev/docs/stack-trace-api
相关推荐
在Node.js开发过程中,调试是不可或缺的一环,它能帮助我们找出代码中的错误,提高程序的稳定性和效率。《Node.js调试指南》是一份详细总结了Node.js开发中调试技巧和策略的资源,旨在帮助开发者深入理解Node.js的...
在IT行业中,Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程,极大地拓宽了JavaScript的应用范围。而“stackman”是一个专门为Node.js设计的工具,它与名为...
在当前的Web开发领域,Node.js和Vue.js是两大不可或缺的技术栈。Node.js作为JavaScript的服务器端运行环境,极大地拓宽了JavaScript的应用场景,而Vue.js则是一款轻量级且功能强大的前端框架,两者结合能构建出高...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。Chrome DevTools 是一套强大的 Web 开发和调试工具,通常用于前端开发,但它也能与 Node.js 结合...
Node.js 是一个开源的、跨平台的 JavaScript 运行环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 的强大之处在于它提供了一个丰富的生态系统,包含了大量的第三方模块,其中 `node-inspector` 就是其中...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。Locus 模块是专为 Node.js 设计的一个调试工具,它为开发者提供了一种高效、便捷的方式来调试 Node....
在Node.js开发中,调试是不可或缺的一个环节,它帮助开发者找出程序中的错误和性能瓶颈。本文将详细介绍如何使用ironNode和Chrome Developer Tools (CDT) 进行高效的Node.js代码调试。 首先,让我们理解ironNode。...
Node.js是JavaScript在服务器端运行的环境,它允许开发者使用JavaScript进行后端开发。...安装完成后,你可以通过命令行工具验证安装的Node.js版本,例如在命令行输入`node -v`,将显示当前系统中安装的Node.js版本。
LAEH2 ( Asynchronous Error Handling v2 for Node.js )是 Node.js 异步错误处理工具。...为减少重复的字符,可以用 /$/ 代替 /node_modules/ ,或者在堆栈轨迹中删除当前目录文件名的前缀。 标签:LAEH2
虽然Node.js v18是一个当前版本,但请注意它并不是一个长期支持(LTS)版本。对于生产环境,通常建议使用LTS版本以获取更长时间的安全更新和支持。 10. **社区支持**: Node.js v18的发布伴随着广泛的社区支持和...
在开发JavaScript应用,尤其是Node.js应用时,Visual Studio Code(VSCode)是一个极其受欢迎的集成开发环境(IDE)。其中,其强大的调试工具是开发者的重要助手。这篇教程将深入讲解如何配置VSCode的`launch.json`...
Node.js 是一个基于Chrome V8引擎的JavaScript运行环境,它让开发者可以在服务器端使用JavaScript进行编程,极大地扩展了JavaScript的应用范围。"Node.js-devtools-playground" 是一个专为Node.js开发者设计的独立...
Node.js是一个开源、跨平台的JavaScript运行时环境,它允许开发者使用JavaScript编写服务器端应用程序。Node.js的设计基于事件驱动、非阻塞I/O模型,使得它非常适合构建轻量级、高性能的应用程序。 **稳定度** Node...
堆栈用于MongoDB,Node.js和Vue.js的入门级存储库,具有基于Docker的本地环境。 安装运行堆栈$ docker-compose up从浏览器访问堆栈启动器堆栈与负载均衡器一起使用,该负载均衡器绑定到端口80和443。它当前服务于域...
3. **Node.js**:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让JavaScript可以在服务器端执行,打破了JavaScript只能在浏览器中运行的传统。Node.js的非阻塞I/O模型和事件驱动特性使其在高并发场景下...
标题中的"mac node-v14.4.0.zip"指的是针对Mac操作系统的Node.js版本14.4.0的压缩包文件。Node.js是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地拓宽了JavaScript的...
SSB Neon将SSB Node.js堆栈迁移到Rust,逐渐,SSB Neon模块是用Rust而不是JavaScript编写的npm软件包。 您可以使用npm软件包ssb-neon-something来直接替换ssb-something。 当前,它们是:ssb-neon-keys neon-muxrpc...
- **局限性**:当前Node.js还存在一些不足,如SSL支持不够成熟、在Windows平台上的表现不佳以及由V8引擎带来的1GB堆栈内存限制等问题。 - **未来发展**:随着社区的不断发展和完善,这些问题正在逐步得到解决,Node....
在Node.js中,console.trace() 是一个非常有用的内置方法,它用于向标准错误流(stderr)输出当前的调用栈跟踪信息。这个功能对于开发者来说,尤其在进行调试时,非常方便,因为它可以准确地显示出程序执行到 trace...
Node.js 是一个开源的、跨平台的 JavaScript 运行环境,它允许开发者在服务器端运行 JavaScript 代码。"node-v10.9.0-cur" 指的是 Node.js 的一个特定版本,即 v10.9.0,通常称为 LTS(长期支持)版本,这些版本在...