你的 Error Dashboard 在骗你——它没有显示的内容

发布: (2026年2月23日 GMT+8 19:02)
10 分钟阅读
原文: Dev.to

抱歉,我无法直接访问外部链接获取文章内容。请您把需要翻译的文本粘贴在这里,我会帮您翻译成简体中文,并保留原始的格式、Markdown 语法以及代码块和 URL。谢谢!

前端错误监控的肮脏秘密

每个市面上的工具都做同样的事:

  1. 捕获异常。
  2. 按堆栈跟踪分组。
  3. 发送 Slack 警报给你。

然后就是 你的问题。你仍然需要弄清楚:

  • 这是竞争条件吗?
  • 是 API 调用失败了吗?
  • 是内存泄漏吗?
  • 是水合不匹配吗?

你不知道。工具也不知道。祝你接下来 3 小时的侦探工作顺利。

“为什么每个错误工具都告诉我 崩溃了什么,却没有一个告诉我 为什么会崩溃?”

介绍 CrashSense – 一个崩溃诊断 SDK(不是另一个错误跟踪器)

同样的 TypeError?CrashSense 会返回如下结构化报告:

{
  "category": "memory_issue",
  "subcategory": "memory_leak",
  "confidence": 0.87,
  "severity": "critical",

  "contributingFactors": [
    {
      "factor": "high_memory_utilization",
      "weight": 0.9,
      "evidence": "Heap at 92% (487MB / 528MB)"
    },
    {
      "factor": "memory_growing_trend",
      "weight": 0.8,
      "evidence": "Heap growing at 2.3MB/s over 60s"
    },
    {
      "factor": "high_long_task_count",
      "weight": 0.6,
      "evidence": "4 long tasks in last 30s (avg 340ms)"
    }
  ],

  "breadcrumbs": [
    { "type": "navigation", "message": "User navigated to /checkout" },
    { "type": "click",      "message": "User clicked 'Add to Cart'" },
    { "type": "network",    "message": "POST /api/cart → 200 (142ms)" },
    { "type": "console",    "message": "Warning: memory pressure elevated" }
  ],

  "aiAnalysis": {
    "rootCause": "Memory leak in useEffect — event listener not cleaned up",
    "fix": { "code": "return () => window.removeEventListener('resize', handler);" },
    "prevention": "Always return cleanup functions from useEffect with side effects"
  }
}

根本原因已分类。提供了证据链。建议了修复方案。

值班的初级工程师本可以在 凌晨 2:01 解决它——无需叫醒任何人。

CrashSense 工作原理

CrashSense 是一个 分类引擎,能够 实时 将系统信号与错误模式关联。
SDK 通过原生浏览器 API 被动监控 四个 系统维度——无需 monkey‑patch,也不需要代理包装。CPU 开销保持在 2 % 以下

监控维度

监控项使用的 API监控内容
内存performance.memory堆使用量、利用率 %、增长趋势
事件循环PerformanceObserver(Long Task)阻塞任务、帧时序
网络fetch / XMLHttpRequest 拦截请求失败、超时、离线状态
IframeMutationObserverIframe 数量、跨域检测

所有监控都是 被动 的。

基于信号的分类

当错误发生时,分类器会查看 当前系统状态,而不仅仅是错误信息:

Error: TypeError (reading 'map')
  + Memory at 92% and growing          → memory_issue signal
  + 4 long tasks in last 30 s          → event_loop signal
  + 0 network failures                → not network_induced
  + React component stack present     → check framework_react

每个信号会根据证据强度分配权重。
得分最高的类别获胜;置信度分数反映确定程度。

崩溃类别

类别捕获内容
memory_issue内存泄漏、堆峰值、OOM
event_loop_blocking无限循环、UI 卡死、长任务
framework_react水合不匹配、无限重渲染、hook 违规
framework_vue响应式循环、watcher 级联、生命周期错误
network_induced离线崩溃、CORS 阻止、超时级联
iframe_overload过多 iframe 导致内存耗尽
runtime_errorTypeErrorReferenceErrorRangeError

每一次用户交互都会自动记录——点击、导航、网络请求、控制台输出、状态变化。当崩溃报告生成时,你看到的是 时间线,而不仅仅是堆栈跟踪。

LLM 集成

接入你自己的 LLM(OpenAI、Anthropic、Google,或任何兼容的端点)。CrashSense 会发送 结构化、令牌优化 的负载,并接收解析后的根因分析及修复代码。

架构图

![展示 CrashSense 监控流水线的架构图:系统监视器 → 事件总线 → 分类器 → 崩溃报告]

快速开始(React)

npm install @crashsense/core @crashsense/react
import { createCrashSense } from '@crashsense/core';
import { CrashSenseProvider } from '@crashsense/react';

const cs = createCrashSense({
  appId: 'my-app',
  onCrash: (report) => {
    console.log(report.event.category);     // "memory_issue"
    console.log(report.event.confidence);   // 0.87
    console.log(report.event.contributingFactors);
  },
});

function App() {
  return (
    <CrashSenseProvider cs={cs}>
      {/* ... */}
    </CrashSenseProvider>
  );
}

用于细粒度控制的 Hook

import { useCrashSense, useRenderTracker } from '@crashsense/react';

function Checkout() {
  const { captureException, addBreadcrumb } = useCrashSense();
  useRenderTracker('Checkout'); // warns on excessive re‑renders

  const handlePay = async () => {
    addBreadcrumb({ type: 'click', message: 'User clicked pay' });
    try {
      await processPayment();
    } catch (err) {
      captureException(err, { action: 'payment' });
    }
  };

  return <button onClick={handlePay}>Pay Now</button>;
}

快速入门 (Vue)

npm install @crashsense/core @crashsense/vue
import { createCrashSense } from '@crashsense/core';
import { CrashSensePlugin } from '@crashsense/vue';

const cs = createCrashSense({
  appId: 'my-app',
  onCrash: (report) => console.log(report),
});

app.use(CrashSensePlugin, { cs });

(Vue 示例的后续内容请参见 SDK 文档。)

要点

CrashSense 并不会神奇地修复 bug;它 对 bug 进行分类,将其与实时系统信号关联,并呈现简洁、可操作的报告。值班的初级工程师现在可以在凌晨 2 点解决内存泄漏 而不必叫醒其他人

CrashSense 快速入门 (Vue)

import { createApp } from 'vue';
import { crashSensePlugin } from '@crashsense/vue';
import App from './App.vue';

const app = createApp(App);
app.use(crashSensePlugin, { appId: 'my-app' });
app.mount('#app');

捕获: 响应式循环、生命周期错误、通过 app.config.errorHandler 捕获的组件故障.

AI‑驱动的根本原因分析

npm install @crashsense/ai
import { createAIClient } from '@crashsense/ai';

const ai = createAIClient({
  endpoint: 'https://api.openai.com/v1/chat/completions',
  apiKey: process.env.OPENAI_API_KEY!,
  model: 'gpt-4',
});

const analysis = await ai.analyze(report.event);
console.log(analysis?.rootCause);   // "Memory leak in useEffect..."
console.log(analysis?.fix?.code);    // "return () => window.removeEventListener(..."

“这是我最自豪的功能。” – CrashSense

CrashSense 不仅在崩溃后告诉你。它在浏览器标签页 之前 死亡时就检测到危险情况。

预崩溃内存压力等级

LevelMemory TriggerMeaning
elevated> 70 % heap系统处于压力之下
critical> 85 % heap高风险 — 需要采取措施
imminent> 95 % heap崩溃即将发生,几秒内可能崩溃
import { createCrashSense } from '@crashsense/core';

const cs = createCrashSense({
  appId: 'my-app',
  enablePreCrashWarning: true,
  enableMemoryMonitoring: true,
});

警告会记录为 breadcrumb。当发生崩溃时,报告会显示完整的升级路径:elevated → critical → imminent → crash

![预崩溃警告升级时间线,显示 elevated → critical → imminent → crash]

SDK 约束与统计

设计约束

  1. SDK 必须永不导致应用崩溃。
  2. 包大小很重要——压缩后约 7 KB,且无运行时依赖。
  3. 必须在任何数据离开浏览器之前清除 PII(GDPR‑by‑design)。
  4. 误报会破坏信任。

包大小与依赖

大小依赖
@crashsense/core~7 KB0
@crashsense/react~1.3 KB0 (peer: react)
@crashsense/vue~1.2 KB0 (peer: vue)
@crashsense/ai~3.1 KB0

功能对比

功能CrashSenseSentryLogRocketBugsnag
根因分类✅ 7 类❌ 仅堆栈追踪
内存泄漏检测✅ 趋势 + 使用率
崩溃前警告✅ 3 级升级
AI 修复建议✅ 自带 LLM
PII 自动清理✅ SDK 级别⚠️ 服务器端⚠️
包大小~7 KB~30 KB~80 KB~15 KB
运行时依赖0多个多个多个
定价免费永久免费层$99/月$59/月

最近发布 & 路线图

  • v1.1.0 – OOM 恢复检测:当浏览器因内存耗尽而关闭标签页时,CrashSense 在下次页面加载时使用 sessionStorage 快照和 6‑signal 分析引擎恢复完整的崩溃上下文(检查点、面包屑、崩溃前警告)。

即将推出

  • 对生产堆栈跟踪的 source‑map 支持
  • 崩溃分析仪表板 UI
  • 更多框架适配器(Svelte、Solid)
  • Webhook 集成(Slack、Discord、PagerDuty)
npm install @crashsense/core

Resources

  • GitHub – ⭐️ 如果它能帮你节省调试时间,请给它加星
  • Documentation – 完整的 API 参考、指南、示例
  • npm@crashsense/core, @crashsense/react, @crashsense/vue, @crashsense/ai

免费。MIT 许可证。零供应商锁定。
Hoai Nho 构建 —— 一位在凌晨 2 点厌倦了充当侦探的技术负责人。

0 浏览
Back to Blog

相关文章

阅读更多 »