惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
罗磊的独立博客
爱范儿
爱范儿
J
Java Code Geeks
博客园 - 司徒正美
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
美团技术团队
小众软件
小众软件
Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Jina AI
Jina AI
Y
Y Combinator Blog
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
Vercel News
Vercel News

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
How to Debug JavaScript Like a Senior Developer in 2025
Kui Luo · 2026-05-30 · via DEV Community

Kui Luo

The fastest way to fix JS bugs isn't more logging — it's knowing which tool to reach for.

After debugging production JavaScript for over 8 years, I've found that most developers waste 60-70% of their debugging time on the wrong approach. Here's the exact toolkit and workflow that cuts debugging time by half.


The Debugging Toolkit That Actually Works

Tool Best For Time Saved Difficulty
Chrome DevTools Sources panel Step-through debugging ~40% per bug Low
Console.table() Inspecting arrays/objects ~30% over console.log Low
Performance tab Runtime bottlenecks ~50% on perf bugs Medium
Network tab waterfall API timing issues ~35% on network bugs Low
Conditional breakpoints Reproducing intermittent bugs ~45% on flaky bugs Medium

5 Techniques That Separate Junior From Senior Debuggers

1. Use Conditional Breakpoints Instead of Logging Sprinkles

Instead of adding console.log(user.id === 42) and redeploying, right-click a line in DevTools and select "Add conditional breakpoint." Type user.id === 42 and the debugger pauses only when that condition is true.

This alone saves roughly 5-10 minutes per debugging cycle because you skip the edit-save-reload loop entirely.

2. Replace console.log with console.table for Complex Data

When inspecting an array of 20+ objects, console.log gives you a collapsed mess. console.table(yourArray) renders it as a sortable, scannable table directly in the console.

// Instead of this:
console.log(users);

// Use this:
console.table(users.filter(u => u.active));

This makes it about 3x faster to spot the bad record in a dataset.

3. Record Performance Profiles, Don't Guess

Most developers estimate which function is slow. Don't guess. Open the Performance tab in DevTools, click "Record," reproduce the action, then stop. The flame chart shows you exactly which function consumed the most time.

In my experience, the actual bottleneck differs from the suspected one about 60% of the time.

4. Use the Call Stack Panel to Trace Async Bugs

Async bugs are the hardest to track. When your code breaks inside a callback or promise chain, DevTools shows the async call stack in grey. Enable "Async" in the call stack panel to see the full chain from event listener to error.

This turns a 30-minute mystery into a 2-minute fix in most cases.

5. Log to a Structured Format From Day One

Replace scattered console.log calls with a minimal structured logging pattern:

const debug = {
  api: (msg, data) => console.log(`[API] ${msg}`, data),
  state: (msg, data) => console.log(`[STATE] ${msg}`, data),
  perf: (label) => console.time(label),
  perfEnd: (label) => console.timeEnd(label),
};

Searching [API] or [STATE] in the console filters instantly. Teams using this pattern report finding root causes about 40% faster than those using plain logging.


The 15-Second Debugging Routine

When a bug report lands, follow this sequence:

  1. Reproduce first — Open DevTools, trigger the bug, note the exact error (30 seconds)
  2. Set a breakpoint at the error location in Sources panel (15 seconds)
  3. Inspect state — Check variables in the Scope panel, not by adding logs (1 minute)
  4. Fix and verify — Apply fix, test, done

Total average time: 4-8 minutes for a typical bug, compared to 12-20 minutes with the log-reload-check approach.


One Thing to Stop Doing Today

Stop using console.log as your primary debugging tool. It works for simple cases, but for anything involving async flow, state mutations, or performance issues, DevTools' built-in features are faster and more reliable.

The shift from console.log to conditional breakpoints and the Performance tab is the single biggest productivity jump most JavaScript developers can make right now — no new tools or libraries required.