堆栈跟踪格式化与解析器
指导
堆栈跟踪格式化与解析器
粘贴来自JavaScript、Python、Java、Ruby、Go、.NET或PHP的原始堆栈追踪,立即获得颜色编码、逐帧解析的分析结果。该工具可自动检测语言,将您的代码与框架噪音分离,并生成一个干净的Markdown块,可直接用于错误报告或拉取请求。
如何使用
- 将原始堆栈追踪粘贴到输入区域,或点击任一语言示例以查看格式化器的实际效果。
- 保持语言选项开启 自动检测,或如果格式异常或被截断,则手动选择一个。
- 切换 折叠框架/供应商帧 用于将长段库代码折叠为单个可展开块。
- 使用 高亮用户代码帧 用于使您的文件从追踪的其余部分中突出显示。
- 点击Markdown输出旁边的复制按钮,将干净的代码块粘贴到GitHub、Slack或Jira中。
特征
- 支持七种语言 – JavaScript / TypeScript、Python、Java / Kotlin、Ruby、Go、.NET(C#)和PHP。
- 自动语言检测 – 解析器会检查您追踪中的特征模式,并选择正确的语法,因此您通常无需手动设置。
- 供应商帧折叠 – 长段node_modules、site-packages、Spring、gems或System.*帧可折叠为单次点击展开的行。
- 用户代码高亮 – 您自己的文件将以温暖的强调色显示,使相关行不再被噪音淹没。
- 异常摘要 – 异常类型和消息被提取到带有总帧数、用户帧数和供应商帧数徽章的标题中。
- 原因链 – Java中的嵌套原因和Python中的链式追踪被分别渲染为独立部分。
- Markdown导出 – 生成一个带边框的代码块,可直接粘贴到错误报告、拉取请求或聊天工具中。
- 完全客户端 – 任何内容都不会离开您的浏览器;可安全用于生产系统的内部堆栈追踪。
常见用例
- 处理生产事故 – 粘贴长追踪后,立即能识别出哪个您自己的文件位于调用链的顶端。
- 编写更好的错误报告 – 导出一个Markdown格式的追踪,可在GitHub、GitLab和Jira中清晰渲染。
- 审查同事的错误日志 – 折叠第三方帧,使对话能集中于您实际拥有的代码。
- 教授调试技巧 – 使用用户/供应商颜色标注,向新入职的开发者展示如何从底部向上阅读追踪。
常问问题
-
为什么从底部向上读取堆栈追踪?
在大多数语言中,函数调用时栈向下增长,运行时会将最近的调用打印在顶部。从底部向上阅读可获得时间顺序:首先是入口点,然后是每次递归调用,最后是失败的行。查看底部也是在Java中“由……引起”语句和Python中链式追踪所在的位置,这些通常包含真正的根本原因。
-
堆栈追踪和崩溃转储有什么区别?
堆栈追踪是异常发生时活跃的函数调用列表。崩溃转储是内存、寄存器和线程在致命故障时刻的二进制快照,通常由操作系统或运行时生成。堆栈追踪成本低且易于共享;而崩溃转储需要调试器才能有用,且通常包含敏感内存内容。
-
什么是框架或供应商帧?
文件路径或全限定名属于库、框架、运行时或已安装依赖项而非您自己的源代码的帧。示例包括node_modules、site-packages、vendor/、/usr/lib/、GOROOT、java.* / javax.*前缀以及.NET中的System.* / Microsoft.*命名空间。这些帧很少包含您正在寻找的错误,因此折叠它们可使追踪更易阅读。
-
为什么Python追踪中包含“在处理上述异常时”这一行?
Python保留异常链:当一个异常在处理另一个异常时被触发,解释器会打印两者。“在处理上述异常时,又发生了另一个异常”表示隐式链,而“上述异常是以下异常的直接原因”表示通过'raise X from Y'显式设置的链。这两者帮助您判断后续错误是被先前错误引起的,还是仅仅叠加在上面发生的。
-
Go中的panic是什么,它与异常有何不同?
panic是Go中用于不可恢复的运行时错误的机制,其精神类似于异常但范围更窄。Go中的惯用做法是使用返回的错误值处理预期的失败情况,而将panic保留给真正意外的编程错误,如空指针解引用或越界切片访问。panic会遍历goroutine的栈,运行延迟函数,最终在未被recover捕获的情况下导致程序崩溃。
