一、捕捉堆栈的时机
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
相关推荐
LAEH2 ( Asynchronous Error Handling v2 for Node.js )是 Node.js 异步错误处理工具。...为减少重复的字符,可以用 /$/ 代替 /node_modules/ ,或者在堆栈轨迹中删除当前目录文件名的前缀。 标签:LAEH2
堆栈用于MongoDB,Node.js和Vue.js的入门级存储库,具有基于Docker的本地环境。 安装运行堆栈$ docker-compose up从浏览器访问堆栈启动器堆栈与负载均衡器一起使用,该负载均衡器绑定到端口80和443。它当前服务于域...
SSB Neon将SSB Node.js堆栈迁移到Rust,逐渐,SSB Neon模块是用Rust而不是JavaScript编写的npm软件包。 您可以使用npm软件包ssb-neon-something来直接替换ssb-something。 当前,它们是:ssb-neon-keys neon-muxrpc...
本文为开发者总结了4个...如果一个请求需要长时间处理,Node.js会把该请求发送给一个事件循环(event loop),然后继续处理在调用堆栈(call stack)中的下一请求。当延后请求处理完毕时,它会告知Node.js同时浏览器会做
datree.io ... 这样,在安装软件包时(npm install $ packageName $),您将获得有关可选替代方案(如果有),它们的评分以及该软件包当前是否在开发堆栈中使用的见解。 我的使用情况-与其他选择相比
在各种堆栈(CAP Node.js、CAP Java SDK、ABAP)上演示和比较 SAP Fiori 功能 在各种堆栈上运行 UI 测试套件 目前,该应用程序仅适用于 CAP Node.js 堆栈。 CAP Java SDK 的版本将很快推出。 该应用程序仍然包含...
MEAN Tracker for Node.js新闻 该应用程序使用来更新有关的最新新闻。 我已尽力在代码中为所有看过的人添加注释,但是,如果您有任何疑问,问题或建议,请随时与我们联系! 使用的技术 后端 -使与数据库的交互变得...
例如 ,摆脱易变的东西考虑使用CSS-in-JS,例如优化更高级的webpack配置预渲染代码拆分Slack clone-实时聊天服务演示: : 堆栈: React套接字表达Node.js MongoDB 我还没有使用任何状态容器(例如Redux),但是在...
CytoBrowser,一个JavaScript和Node.js驱动的环境,用于对超大型显微镜图像进行快速且可访问的协作在线可视化,评估和注释。 针对细胞学的一个分支 处理z堆栈(焦点堆栈),按Ctrl滚动鼠标以进行焦点 带有跟随选项...
节点-xl-包装器 本地或远程 Xen xl 管理实用程序的 Node.js 包装器这是一项正在进行的工作,还不应该使用!!! 你被警告了要求客户端使用此库运行节点应用程序的一侧 -- 用 0.10.33 测试过,如果你测试过旧版本,请...
松弛冠军slackchamp是一个样板设置,用于在docker群中运行PostgreSQL,Node.js,React和NGINX堆栈。入门 cd ui npm install cd .. cd api npm install cd .. docker-compose up注意: docker-compose up应该消除了...
每个事件都接收一个独立的堆栈,父框架中仅包含平台代码,并且事件按其安排的顺序运行。 ASAP提供了一个快速事件队列,该队列将执行任务直到其为空,然后再屈服于JavaScript引擎的基础事件循环。 当一个任务被添加...
使用 Node.js、ExpressJS、AngularJS 和 MongoDB 的简单 MEAN 堆栈应用程序 完整教程 要求:Node.js 和 MongoDB 可选要求:PaperTrail 部署到 Heroku 打开终端。 输入:“heroku 登录”过程与您的用户并通过。 在...
后端Node.js , Express.js 前端React.js , Emotion.js , TailwindCSS , Twin.macro 数据库MongoDB 身份验证JsonWebToken 宠物小精灵数据API- pokeAPI 深度学习推理Tensorflow.js 深度学习培训Docker + ...
#JavaScript Workshops Los Angeles ###使用JS(中级)构建API ####这是谁的目的: 听说过Node的人,可能安装了它,并希望获得一些专业知识。 ####与会者会走的是什么:与会者将知道如何设置Node.JS项目。 动手使用...
以下视频演示显示了概念验证当前支持的所有功能。 它介绍了如何运行应用程序堆栈以及执行请求api的操作。 在以下两个方案中重点介绍了基于事件的通信示例: 通过文章管理服务添加新文章时,通知服务将接收该事件...
具有现代堆栈的最新版本主意Gigster的概念是以下两者的混合: 私人演出日记,您可以跟踪过去和将来的演出与上述相同,但具有社交互动和共享科技栈Gigster当前运行在:设置Docker /由Docker组成后端Node.js Express....
概述docker-slim已与在Ubuntu,Debian,...当前缩小示例Node.js应用程序映像: 从ubuntu:14.04-432MB => 14MB(缩小30.85X ) 来自debian:jessie-406MB => 25.1MB(缩小了16.21X ) 来自node:alpine-66.7MB => 3
也在尝试后端并当前正在学习-React / Next.js 对设计有浓厚的兴趣。 :high_voltage: 技术/软件堆栈 :high_voltage: :high_voltage: 学习-技术/软件堆栈 :high_voltage: ![Node.js]( “学习”)![PHP] ( ...
堆栈跟踪模块使您可以轻松捕获当前堆栈: var stackTrace = require ( 'stack-trace' ) ; var trace = stackTrace . get ( ) ; require ( 'assert' ) . strictEqual ( trace [ 0 ] . getFileName ( ) , __filename ...