精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript 中最被低估的調試利器

開發 前端
堆棧記錄了代碼失敗前的完整調用路徑。 可它不只服務于錯誤場景——同一條調用棧還能泄露性能瓶頸、調用方來源,甚至用戶行為路徑。

你以為那一串紅色報錯只是在罵人?我越來越確信:堆棧(stacktrace)不僅是錯誤信息,它是被低估的調試秘器——更聰明的監控、更快的定位、更穩的修復,都藏在它里頭。

你多半看過堆棧,但也許沒用足它。下面我會分享:我是如何重新愛上堆棧,并把它升級成我的高效調試加速器的。

堆棧不只是報錯單

堆棧記錄了代碼失敗前的完整調用路徑。 可它不只服務于錯誤場景——同一條調用棧還能泄露性能瓶頸、調用方來源,甚至用戶行為路徑。

把它當作一臺時間機器:告訴你代碼去過哪、為何崩

接下來,用幾個實戰招式,把堆棧變成你的調試“外掛”。

① Callsite 追蹤:定位“誰在叫我”

想知道究竟是誰從哪一行調用了你的函數? 你可以在非報錯場景下抓取堆棧——比到處 console.log 干凈得多。

下面這段不會拋錯,只抓“調用方”:

function getCallSite(): string {
  const stack = new Error().stack; // 我們只要 stack,不要拋異常
  if (!stack) return "unknown";

  // 0: Error
  // 1: getCallSite 本身
  // 2: 真實調用者(我們要的)
  const lines = stack.split("\n");
  const callSiteLine = lines[2];

  const match = callSiteLine.match(/at\s+(.+?)\s+\(/);
  return match ? match[1] : "unknown";
}

// 使用示例
function processUser(userId: string) {
  console.log(`processUser called from: ${getCallSite()}`);
  // ... 你的業務邏輯
}

好處:在調用層級復雜的場景,直接反查來源,少走彎路。

② 豐富日志:讓日志“自帶來龍去脈”

日志常常只有“發生了什么”,卻缺“為什么”。 給日志加上一小段堆棧(或至少調用點),上下文立刻清晰。

interface LogContext {
  message: string;
  level: "info" | "warn" | "error" | "debug";
  callSite?: string;
  timestamp: Date;
  data?: Record<string, any>;
}

function createLogger(includeCallSite = true) {
  return {
    info: (message: string, data?: Record<string, any>) => {
      const logContext: LogContext = {
        message,
        level: "info",
        timestamp: new Date(),
        data,
        ...(includeCallSite && { callSite: getCallSite() }),
      };
      console.log(JSON.stringify(logContext, null, 2));
    },

    warn: (message: string, data?: Record<string, any>) => {
      const logContext: LogContext = {
        message,
        level: "warn",
        timestamp: new Date(),
        data,
        ...(includeCallSite && { callSite: getCallSite() }),
      };
      console.warn(JSON.stringify(logContext, null, 2));
    },
  };
}

// 用法
const logger = createLogger(process.env.NODE_ENV === "development");

function updateUserProfile(userId: string) {
  logger.info("Updating user profile", { userId });
  // ... 你的業務邏輯
}

現在日志不再是“失敗了”,而是“在哪條路、哪一行、哪次調用失敗”。

③ 數據庫排障:慢查詢/異常查詢一眼到位

數據庫問題最討厭:結果錯/很慢,但不知道是哪個入口觸發。 把堆棧掛到查詢上,定位入口就變簡單了。

以 Prisma 為例,寫個中間件監控慢查詢:

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient({});

/**
 * 查詢超過 5s 時發出告警,并帶上調用點
 */
prisma.$use(async (params, next) => {
  const startTime = performance.now();

  const result = await next(params);
  const duration = performance.now() - startTime;

  if (duration > 5_000) {
    console.warn("Slow query:", {
      query: `${params.model}.${params.action}`,
      duration: `${duration}ms`,
      callSite: getCallSite(),
    });
  }

  return result;
});

// 使用
async function getUserPosts(userId: string) {
  return await prisma.post.findMany({
    where: { authorId: userId },
  });
}

從此慢在誰手里掛在哪條鏈上,一覽無余。

④ 輕量“事件可觀測”:不用上全套平臺也能追鏈路

沒有昂貴的可觀測系統?用堆棧做一個輕量事件鏈路追蹤也夠用。

思路:每次發布消息時,把調用鏈串起來:

interface MessageEvent {
  type: string;
  data: any;
  publishedChain: string[];
  timestamp: Date;
}

function publishMessage(type: string, data: any, existingChain: string[] = []) {
  const currentCaller = getCallSite();
  const newChain = [...existingChain, currentCaller];

  const event: MessageEvent = {
    type,
    data,
    publishedChain: newChain,
    timestamp: new Date(),
  };

  // 推到你的消息隊列
  messageQueue.publish(event);
}

// 使用
function processOrder(orderId: string) {
  // ... 下單邏輯
  publishMessage("order.completed", { orderId });
}

function handleOrderCompleted(event: MessageEvent) {
  console.log("Message chain:", event.publishedChain);
  publishMessage(
    "notification.sent",
    { orderId: event.data.orderId },
    event.publishedChain,
  );
}

這就像審計軌跡:誰觸發了什么、按什么順序走到哪兒,一清二楚。

⑤ 與 Pino 等日志庫深度整合:日志“指哪打哪”

如果你在用 Pino 等日志庫,給每條日志自動注入調用來源,調試會非常絲滑。

// @ts-expect-error @newrelic/pino-enricher 暫無類型
import nrPino from "@newrelic/pino-enricher";
import pino from "pino";

const logger = pino({
  transport: {
    target: "pino-pretty",
    options: {
      translateTime: "SYS:standard",
      ignore: "pid,hostname",
    },
  },
  timestamp: () => `,"time":"${new Date().toISOString()}"`,
  mixin: () => {
    // 獲取調用點
    const stack = new Error().stack || "";
    const stackLines = stack.split("\n").slice(3); // 跳過 Error 與 logger 內部
    const callerInfo = stackLines[1]?.trim() || "";

    // 提取文件名與行號
    const matches = callerInfo.match(/at\s+(.+)\s+\((.+):(\d+):(\d+)\)/);
    if (matches) {
      const [, fnName, file, line] = matches;
      const relativeFile = file?.split("/franky/").pop() || file;
      return { caller: `${relativeFile}:${line} (${fnName})` };
    }

    return { caller: callerInfo.replace(/^at\s+/, "") };
  },
});

export { logger };

從此告別“模糊日志”,定位信息內嵌,生產環境也能從容排障。

實用清單:堆棧還能做什么?

  • 定位調用者:捕獲從哪兒觸發了函數。
  • 增強日志:給日志加上callsite,上下文更完整。
  • 數據庫排障:慢查詢告警 + 入口函數
  • 指標打點:把函數級信息喂給 Prometheus 等。
  • 生產可調試:Pino/結構化日志 + 堆棧,事故定位更快。
  • 事件鏈路:發布/消費全鏈追蹤publishedChain
  • 輕量可觀測:不靠重型 APM,也能獲得“接近 APM 的洞察力”。

注意事項與小貼士

  • 不同運行時(Node/瀏覽器/打包后)堆棧格式可能不一致,正則解析要考慮兼容。
  • 生產開啟source-map 支持(或錯誤上報平臺的反混淆),提升可讀性。
  • 頻繁抓堆棧在熱路徑可能有微弱開銷,可按環境或閾值啟用。
  • 對隱私敏感環境,謹慎把堆棧(包含路徑/函數名)外發到第三方。

最后一句話

下一次遇到問題,不要只盯著“紅色報錯”。先抓一條堆棧,試試本文任一技巧:

  • 記錄調用點、
  • 標注慢查詢、
  • 或串起一次消息鏈。

你會驚訝于根因出現得有多快

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2024-12-13 08:02:10

PythonGenerator懶加載

2020-10-04 11:34:28

JavaScript開發技術

2025-10-13 08:11:55

JavaScripStage 4函數式編程

2020-07-13 07:27:16

Python開發

2024-12-03 16:39:41

2023-02-14 07:50:30

Python模塊

2023-11-09 09:02:26

TypeScriptas const

2024-01-03 14:07:06

技術ChatGPTIT

2009-12-21 10:05:00

2013-06-28 17:28:04

推送

2021-05-21 07:26:15

DataSource接口數據庫

2015-07-28 17:00:48

運營商渠道

2021-11-15 10:48:59

元宇宙加密貨幣區塊鏈

2025-10-10 07:05:00

API開發JavaScript

2011-04-22 15:16:26

2025-03-31 08:00:00

JavaScriptAPI開發

2021-08-24 23:23:35

Python工具開發

2022-03-22 08:50:57

Python代碼自帶庫

2024-06-06 10:13:04

2020-06-23 08:28:58

HTML標簽Web
點贊
收藏

51CTO技術棧公眾號

国模私拍在线观看| 一区二区91美女张开腿让人桶| 日本天堂网在线观看| 最新国产一区| 欧美日韩国产美女| 免费看av软件| 欧美一级视频免费| 日韩精品视频网站| 欧美日韩高清在线观看| 欧美色图亚洲激情| 精品久久免费| 欧美视频免费在线| 懂色av一区二区三区四区五区| 亚洲国产成人精品一区二区三区| 老鸭窝91久久精品色噜噜导演| 日韩视频在线观看免费| 91精品啪在线观看国产| 日本精品网站| 精品成人av一区| 亚洲欧美日韩不卡| 免费在线观看污视频| 国产一区二区调教| 国产99久久精品一区二区| 青青草成人免费| 国产一区二区三区电影在线观看| 日韩欧美激情在线| 杨幂毛片午夜性生毛片 | 久久久久久久免费视频了| 国产日韩欧美在线播放| 国产又大又黄又粗| 国内精品久久久久久久97牛牛 | 国产又粗又大又爽的视频| 视频一区二区三区国产| 国产成人免费在线| 成人高h视频在线| 国产女主播喷水视频在线观看| 狠狠88综合久久久久综合网| 久久综合88中文色鬼| 久久精品三级视频| 神马午夜久久| 亚洲成人久久网| 中文字幕乱妇无码av在线| 欧美与亚洲与日本直播| 日韩欧美一区二区三区| 国产日韩欧美精品在线观看| 中文字幕资源网在线观看| 中文字幕精品三区| 欧美一区二区三区成人久久片| 秋霞欧美在线观看| 粉嫩久久99精品久久久久久夜| 国产日韩欧美电影在线观看| 亚洲天堂avav| 久久精品国产一区二区| 国产精品盗摄久久久| 久久中文字幕免费| 亚洲免费一区二区| 欧美在线视频a| 九九九在线观看| 国产农村妇女精品一二区| 欧美有码在线观看视频| 成年人视频在线免费看| 免费亚洲婷婷| 国产精品99久久久久久www | 青青国产91久久久久久| 国产精品久久久久久亚洲调教| 中国精品一区二区| 精品一二三四在线| 51国产成人精品午夜福中文下载| 国产丰满美女做爰| 国产成人av一区二区| 国产精品乱码视频| 日本成人动漫在线观看| 久久综合九色综合欧美就去吻| 欧美精品一区二区三区在线看午夜| 飘雪影视在线观看免费观看| 日本一二三不卡| 先锋影音男人资源| 俄罗斯一级**毛片在线播放| 天天操天天色综合| 熟妇人妻无乱码中文字幕真矢织江| 全球最大av网站久久| 欧美日韩精品久久久| 玖玖爱视频在线| 北条麻妃一区二区三区在线观看| 亚洲激情视频在线播放| 性少妇bbw张开| 久久中文亚洲字幕| 欧美俄罗斯乱妇| 久久夜色精品国产噜噜亚洲av| 日韩高清国产一区在线| 成人激情在线播放| 可以免费观看的毛片| 91丝袜美腿高跟国产极品老师| 青娱乐一区二区| 国产一二区在线| 欧美日韩国产一区二区三区| 亚洲性生活网站| 视频一区在线| 亚洲欧美精品一区二区| 翔田千里88av中文字幕| 一区二区三区国产在线| 国产精品入口福利| 亚洲AV无码乱码国产精品牛牛| 久久综合九色欧美综合狠狠| 三年中国中文在线观看免费播放| 国产无遮挡裸体视频在线观看| 欧美影院精品一区| 精品人妻一区二区免费| 色777狠狠狠综合伊人| 久久免费观看视频| 91成人一区二区三区| av午夜精品一区二区三区| 影音先锋在线亚洲| 咪咪网在线视频| 日韩一区二区三区电影在线观看 | 久久婷婷五月综合色丁香| 日本福利专区在线观看| 亚洲三级电影网站| 欧美xxxxx在线视频| 九九99久久精品在免费线bt| 亚洲欧美国产一本综合首页| 妺妺窝人体色www在线下载| 国产在线视频你懂的| 真实原创一区二区影院| 欧美贵妇videos办公室| 中文字幕视频免费观看| 91在线看国产| 欧洲精品在线播放| 成人自拍视频| 国产一区二区三区在线看 | 亚洲欧洲av另类| 免费在线激情视频| 成人知道污网站| 欧美精品情趣视频| 97精品人妻一区二区三区香蕉| 久久久久国产精品厨房| 大陆极品少妇内射aaaaa| 99久久婷婷国产综合精品青牛牛 | 免费精品视频一区二区三区| av丝袜在线| 精品区一区二区| 欧洲猛交xxxx乱大交3| 久久超碰97中文字幕| 性欧美大战久久久久久久免费观看| 在线观看福利电影| 日韩精品极品毛片系列视频| 久青草视频在线观看| 国产电影一区在线| 无码人妻精品一区二区蜜桃百度| 99热这里有精品| www.国产一区| 一本色道久久综合熟妇| 国产精品无人区| 波多野结衣天堂| 日本成人小视频| 国产精品一区二区三区在线播放| 成年人视频在线观看免费| 在线中文字幕一区| 一级黄色录像毛片| 日韩高清在线不卡| 伊人色综合久久天天五月婷| 亚洲伊人伊成久久人综合网| 精品国产欧美一区二区五十路 | 福利所第一导航| 国产成都精品91一区二区三| 性生活免费观看视频| 亚洲国产视频二区| 高清一区二区三区日本久| 人妻无码中文字幕免费视频蜜桃| 亚洲综合精品自拍| av无码一区二区三区| 久久久久国产精品午夜一区| 亚洲精品久久久久久一区二区| 欧美黄色网络| 欧美国产视频一区二区| 无码h黄肉3d动漫在线观看| 欧美午夜激情视频| 亚洲a∨无码无在线观看| 六月婷婷色综合| 在线观看17c| 嫩草国产精品入口| 国产精品第10页| 污网站在线免费看| 日韩av网站导航| 中文字幕男人天堂| 亚洲自拍偷拍麻豆| 香蕉网在线播放| 看电视剧不卡顿的网站| av一区二区三区免费观看| 午夜精品福利影院| 国产日韩欧美另类| 成年人黄色大片在线| 国产一区二区三区日韩欧美| 国产精品久久久久久在线| 亚洲福利一二三区| 永久免费毛片在线观看| 国产精品综合一区二区| 欧美a在线视频| 天天综合一区| 久久精品久久精品国产大片| 国产成人免费av一区二区午夜| 国产综合在线看| 日本中文字幕在线2020| 亚洲成人激情图| 国产精品久久久久久久久久久久久久久久久久 | 91香蕉一区二区三区在线观看| 成人自拍视频在线| 一路向西2在线观看| 99视频精品| av电影一区二区三区| 一区二区小说| 国产经典一区二区三区| 成人全视频免费观看在线看| 国内偷自视频区视频综合| 黄色av电影在线观看| 亚洲视频欧美视频| 无码国产色欲xxxx视频| 日韩一区二区三区免费观看| 一卡二卡三卡在线| 91激情五月电影| 日韩精品视频播放| 亚洲永久免费av| 动漫性做爰视频| 国产精品毛片大码女人| 久久久久久久久久久久久久久| 丁香一区二区三区| 中文字幕久久久久久久| 国内成+人亚洲+欧美+综合在线| 亚洲色图38p| 久久伊人亚洲| 久久先锋影音av鲁色资源| 成人一区二区三| 国产精品久久久免费| 精品视频在线观看一区| 国产精品多人| 永久免费看av| 中文在线日韩| 米仓穗香在线观看| 中文无码久久精品| 久久久久亚洲av无码专区喷水| 日韩精品1区| 欧美亚洲视频一区| 68国产成人综合久久精品| 亚洲欧洲精品一区| 久久日文中文字幕乱码| 日韩国产精品一区二区| 欧美丝袜丝交足nylons172| 欧美凹凸一区二区三区视频| 欧美91在线| 精品日产一区2区三区黄免费| 亚洲国产aⅴ精品一区二区| 97se国产在线视频| 日韩深夜福利网站| 国产精品日韩在线| 成人免费观看49www在线观看| 国产欧美精品va在线观看| 亚洲综合av一区二区三区| 成人免费自拍视频| 欧美一级做一级爱a做片性| 国产精品成人播放| 91精品麻豆| 成人免费福利视频| 亚洲人成777| 国产精品乱码一区二区三区| 超碰精品在线| 91九色蝌蚪嫩草| 日韩区欧美区| 久久精品二区| 国产在线日韩精品| 日本午夜精品电影| 999久久久免费精品国产| 中文字幕av日韩精品| 91精品啪在线观看国产81旧版| 精品人妻大屁股白浆无码| 精品成人国产| heyzo亚洲| 美女视频网站久久| а 天堂 在线| 丁香五精品蜜臀久久久久99网站 | 欧美精品一区二区三区视频| 成 人 免费 黄 色| 91精品国产欧美一区二区| 日日夜夜精品免费| 日韩激情av在线播放| 三级理论午夜在线观看| 中文字幕亚洲无线码a| 好了av在线| 欧美贵妇videos办公室| 欧美free嫩15| 91视频88av| 免费 成 人 黄 色| 亚洲精彩视频| 中文字幕av导航| 一本色道久久综合一区| 狠狠操狠狠干视频| 岛国精品一区二区| 深爱五月激情网| 一区二区激情小说| 在线观看国产亚洲| 欧美日韩国产综合草草| 亚洲 另类 春色 国产| 亚洲视频视频在线| freemovies性欧美| 91国自产精品中文字幕亚洲| 日本h片久久| 91色p视频在线| 国产乱码精品一区二区亚洲| 蜜臀av.com| 中文亚洲字幕| 国产美女视频免费看| 波多野结衣亚洲一区| 中国美女黄色一级片| 亚洲精品中文字幕乱码三区| 东京热一区二区三区四区| 91精品国产综合久久精品性色| 亚洲人成色777777精品音频| 久久夜色精品国产欧美乱| 国产伦精品一区二区三区视频金莲| 成人h视频在线观看播放| 精品黄色一级片| 男人添女人下部视频免费| 奇米777欧美一区二区| 亚洲熟妇一区二区三区| 亚洲男人的天堂一区二区| 久久久久久久久黄色| 日韩电影第一页| 国产黄大片在线观看画质优化| 国产精品欧美激情在线播放| 日本成人7777| a级片一区二区| 国产一区美女在线| 亚洲色成人网站www永久四虎| 亚洲一级二级在线| www日本在线| 久久精品视频va| 国产在线看片免费视频在线观看| 亚洲综合色av| 欧美gay男男猛男无套| 国产免费视频传媒| 91在线观看视频| 麻豆一区二区三区精品视频| 日韩三级精品电影久久久| 在线播放毛片| 亚洲二区视频在线| 中文字幕在线观看第三页| 成人精品在线视频观看| 日韩精品一区二区在线播放 | 日韩欧美在线播放视频| 成人h动漫精品一区二| 蜜桃av.com| 欧美男女性生活在线直播观看| 日本不卡不卡| 国产女精品视频网站免费| 日韩精品第一区| 色偷偷中文字幕| 亚洲欧美日韩系列| 超碰在线观看99| 欧美日韩国产二区| 日韩在线观看一区二区三区| 欧美一区二区视频在线播放| 国产精品中文字幕日韩精品| 欧美日韩偷拍视频| 日韩精品一区二区三区在线 | 人体精品一二三区| 婷婷精品在线观看| 99精品人妻少妇一区二区| 国产亚洲精品bt天堂精选| 无码人妻精品一区二区三区蜜桃91 | 丝袜人妻一区二区三区| 国产不卡在线视频| 九九免费精品视频| 亚洲精品一区二区久| 成人视屏在线观看| 久久久久久一区| 精品一区二区免费视频| 日本中文在线视频| 亚洲精品久久在线| 成人私拍视频| 日韩激情久久| 国产激情一区二区三区四区 | 中日韩精品一区二区三区| 日韩欧美极品在线观看| 九色网友自拍视频手机在线| 国产91色在线| 久久国产影院| 中国xxxx性xxxx产国| 欧美日韩视频在线| 成人无码一区二区三区| 91爱爱小视频k| 精品大片一区二区| 在线免费看污网站| 亚洲免费成人av| 男人天堂亚洲二区| 国产精品稀缺呦系列在线| 影音先锋日韩资源| av黄色免费网站| 7777精品伊人久久久大香线蕉超级流畅| 成人在线免费看片| 激情小说综合区| 国产在线视视频有精品|