日志 / 可观测性

堆栈格式化支持 JavaScript、Python、Java、Go、C# 与 Rust 六种语言

粘贴一段堆栈,自动识别语言(也可以手动选择),第三方框架帧可以折叠,只看自己写的代码。

堆栈格式化

示例:
语言

堆栈输入

全程在浏览器本地运行,堆栈内容不会被上传。

调用帧

输入中…将自动解析

终端里甩出来的一整段堆栈信息,几乎全是长得差不多的「at ...」或「File ...」行,真正指向自己代码的那一帧常常埋在框架内部调用的中间。不管叫它堆栈格式化、异常堆栈解析,还是报错堆栈美化,要做的事都一样:把这一整墙文字变成一眼能扫完的调用帧列表。

适合在真的遇到报错时用——浏览器控制台、CI 日志、崩溃报告,或者同事发来的一段报错堆栈,需要看清调用链、准确的文件和行号,以及根因异常,而不用手动数「Caused by:」层数,也不用划过几十行 node_modules 帧才找到自己写的代码。整个解析过程都在浏览器本地完成,粘贴的内容不会被上传。

为什么用这个堆栈格式化工具

为六种真实堆栈格式而写,不是一套硬套上去的通用规则。

自动识别语言,还能手动覆盖

粘贴堆栈后通常不用碰下拉菜单——语言会通过扫描帧本身的语法自动判断出来。遇到格式混杂或识别出错的情况,六种语言(JavaScript/Node、Python、Java/Kotlin、Go、C#/.NET、Rust)都可以一键手动指定,不会被卡在一个改不了的猜测结果上。

语言下拉菜单从自动识别切换到手动选择的语言,同一段堆栈重新解析

Caused by 链条拆成独立区块

带 Caused by 链的 Java 异常,或者被「During handling of...」串起来的 Python traceback,会按顺序拆成各自独立、带标签的区块,底部的根因和顶部的外层异常一样容易找到——不用再在一长串分不清层次的帧里翻找。

一段 Java 堆栈被拆成两个区块,中间用 Caused by 标签连接,根因显示在最下方

框架噪音折叠成一行

打开折叠框架帧后,连续的 node_modules、site-packages、org.springframework 或类似框架帧会折叠成一行「已折叠 N 帧」,让自己写的代码优先出现在眼前——任何一组折叠行点击一下就能重新展开。

一串连续的 node_modules 帧被折叠成一行摘要,摘要上方是用户自己代码的那一帧

这份调用帧列表帮你做的三件事

解析一段堆栈、折叠不需要看的帧、复制你真正需要的内容。

01

粘贴六种支持格式中的任意一种

直接粘贴原始的 JavaScript/Node、Python、Java/Kotlin、Go、C# 或 Rust 堆栈,不用先手动清理格式。停止输入大约 350 毫秒后会自动解析,也可以关闭自动解析,改成点击按钮或按 Ctrl/Cmd+Enter 手动触发。

  • 加载三个内置示例,无需自己输入就能看到 Caused by 链、Python 报错堆栈和 node_modules 噪音帧长什么样
  • 无法匹配任何已知格式的行会原样保留并标记为「未识别」,不会让整段解析失败
02

折叠不想看的帧

打开折叠框架帧后,连续的 node_modules、site-packages、java./org.springframework.、runtime.、std::/core:: 或 System. 这类帧(取决于识别出的语言)会折叠成一行「已折叠 N 帧」。切换开关不需要重新解析,只是把同一份结果重新分组,瞬间生效。

  • 只有一帧框架代码夹在自己的代码中间时不会被折叠——连续两帧以上才会归并
  • 每一组被折叠的帧都可以单独点击展开,不用关掉整个开关
03

精确复制需要的内容

点击任意一个已识别帧的 file:line,只复制这一处位置,方便直接跳转到编辑器里的那一行。结果区的复制和下载会导出按目标语言习惯重新排版后的纯文本堆栈;输入或选项一变,这两个按钮会立刻变灰禁用,避免复制到过期结果。

  • 每个区块顶部都会单独高亮显示这一层的异常类型和错误信息,包括每一层 Caused by 的根因
去用堆栈格式化

调用帧列表比原始文本多做了什么

六种真实堆栈格式各自的结构化字段、链条识别与噪音折叠。

六种语言的帧识别

JavaScript/Node、Python、Java/Kotlin、Go、C#/.NET 与 Rust 各自有自己的帧语法,把挤成一行看不清的堆栈信息换行整理成函数名、文件、行号和列号各自成列——不是逐行硬切,让这个堆栈格式化工具读起来更接近运行时自己打印的样子。

Caused by 与 traceback 链条

Java 的 Caused by 链和 Python 的多层 traceback 会被拆成各自独立、按顺序排列的区块,根因也包含在内——不用再靠眼睛数缩进层级。

框架噪音可折叠

node_modules、site-packages、java./org.springframework. 这类框架命名空间会按语言各自的规则折叠成一行摘要,任意一组点击一下就能重新展开。

逐帧复制 file:line

每一个已识别的帧都有自己的复制按钮,只复制这一帧的文件和行号,和复制整段堆栈是两件事。

未识别行原样保留

不符合当前语言帧语法的行会原样保留并标记「未识别」,不会被悄悄丢弃,也不会让整段解析直接失败。

这个工具做什么、不做什么

真实的行为边界,不是一句笼统的免责声明。

不做符号化或 source map 反解析
压缩后的函数名和文件路径会原样显示。要还原成源码里的真实位置,需要对应的 source map 或调试符号,而这个堆栈格式化工具不会上传或请求任何文件。
只解析文本堆栈,不解析二进制崩溃文件
core dump、minidump 这类二进制崩溃产物不被接受,请粘贴运行时或崩溃报告工具已经打印出来的文本堆栈。
只支持六种声明语言,不做无限猜测
只识别 JavaScript/Node、Python、Java/Kotlin、Go、C#/.NET 和 Rust 的帧语法。Ruby、PHP、C/C++ 和 Swift 的堆栈大多会显示为「未识别」,不会被强行套进错误的格式里。
复制和下载始终是纯文本
重新排版后的结果不会套上 Markdown 代码块围栏——哪怕一些同类工具会这么做——纯文本才能干净地粘进终端、编辑器或工单系统。

堆栈格式化常见问题

把真实报错粘进在线工具之前,大家通常会问的问题。

把堆栈信息粘贴到在线工具里安全吗?

安全——这个工具全部用当前浏览器标签页里的 JavaScript 解析,粘贴的内容不会被上传、记录或发送到任何服务器,包括帧里出现的本地文件路径和用户名。

堆栈里第三方库的帧能不能折叠只看自己的代码?

可以,打开工具栏里的折叠框架帧开关,连续的 node_modules(或 site-packages、java./org.springframework. 等)帧会折叠成一行,点击这一行就能重新展开。

这个堆栈格式化工具支持 Java、Python 和 JavaScript 吗?

支持,另外还有 Go、C#/.NET 和 Rust,一共六种语言。自动识别通常能从帧的语法直接判断出语言,也可以在下拉菜单里手动指定。

堆栈信息里的文件路径会不会泄露隐私?

路径和其他细节会按粘贴时的原样显示,不会被自动脱敏。因为内容本来就不会离开浏览器,如果要贴到不那么私密的地方(比如公开的问题追踪器),建议先自己检查一遍再贴。

python 报错堆栈要怎么格式化?

直接把完整的 Traceback(含 File 行和最后一行异常信息)粘进输入框即可,语言会被自动识别为 Python;多层 traceback(比如「During handling of the above exception…」连接的两段)也会被拆成两个区块分别展示。

崩溃日志堆栈能在线解析吗?

只要崩溃日志里包含的是文本形式的 Java、Python、JavaScript、Go、C# 或 Rust 堆栈就可以直接粘贴解析;日志里其余无关的行会被当作「未识别」保留,不影响堆栈本身的解析结果。

遇到这个工具解析不对的真实堆栈?

现在就用堆栈格式化整理报错

粘贴任意 JavaScript、Python、Java、Go、C# 或 Rust 堆栈,一秒内得到一份清晰的调用帧列表——不用上传,也不用注册。

把这个免费的堆栈格式化工具收藏起来,下次终端或收件箱里冒出报错时直接用。

全部解析都在浏览器本地完成。