Built for developers, by XinhND

v2.1.0

Ready

Debugging Cheat Sheet

Complete reference guide for Debugging with interactive examples and live playground links

Basic Debugging

Logging

Basic logging techniques

Debugging
# Basic logging
console.log('Variable value:', variable);
console.log('Object state:', JSON.stringify(object, null, 2));
console.log('Function called with:', arguments);

# Debug logging
console.debug('Debug info:', debugInfo);
console.info('Info message:', info);
console.warn('Warning:', warning);
console.error('Error:', error);

# Conditional logging
if (process.env.NODE_ENV === 'development') {
  console.log('Debug info:', debugInfo);
}

Error Handling

Error handling techniques

Debugging
# Try-catch blocks
try {
  // Risky operation
  const result = await riskyOperation();
} catch (error) {
  console.error('Operation failed:', error);
  // Handle error appropriately
}

# Error boundaries
class ErrorBoundary extends React.Component {
  componentDidCatch(error, errorInfo) {
    console.error('Error caught:', error);
    console.error('Error info:', errorInfo);
  }
}

# Global error handling
window.onerror = function(message, source, lineno, colno, error) {
  console.error('Global error:', {message, source, lineno, colno, error});
  return true;
};

Debugging Tools

Debugging tools and techniques

Debugging
# Browser DevTools
// Breakpoint
debugger;

// Console methods
console.table(array);
console.time('operation');
console.timeEnd('operation');
console.trace('Call stack');

// Network debugging
fetch('/api/data')
  .then(response => {
    console.log('Response:', response);
    return response.json();
  })
  .then(data => console.log('Data:', data))
  .catch(error => console.error('Error:', error));

Advanced Debugging

Performance Debugging

Performance debugging techniques

Debugging
# Performance measurement
const start = performance.now();
// Operation to measure
const end = performance.now();
console.log('Operation took:', end - start, 'ms');

# Memory profiling
// Chrome DevTools Memory tab
// Take heap snapshot
// Record allocation timeline

# CPU profiling
// Chrome DevTools Performance tab
// Record CPU profile
// Analyze flame chart

Network Debugging

Network debugging techniques

Debugging
# Network monitoring
// Chrome DevTools Network tab
// Filter by type
// Analyze timing
// Check headers

# API debugging
fetch('/api/endpoint', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(data),
})
.then(response => {
  console.log('Status:', response.status);
  console.log('Headers:', response.headers);
  return response.json();
})
.then(data => console.log('Response:', data))
.catch(error => console.error('Error:', error));

State Debugging

State debugging techniques

Debugging
# Redux debugging
// Redux DevTools
// Action logging
// State inspection
// Time travel debugging

# React state debugging
useEffect(() => {
  console.log('Component state:', state);
}, [state]);

# Vue state debugging
watch(() => state.value, (newValue, oldValue) => {
  console.log('State changed:', {newValue, oldValue});
});

Testing and Debugging

Unit Test Debugging

Unit test debugging techniques

Debugging
# Jest debugging
test('should handle error', () => {
  expect(() => {
    throw new Error('Test error');
  }).toThrow('Test error');
});

# Test coverage
// Jest coverage report
// Istanbul coverage
// Code coverage analysis

# Test debugging
describe('Component', () => {
  it('should render correctly', () => {
    console.log('Test state:', state);
    expect(component).toBeTruthy();
  });
});

Integration Test Debugging

Integration test debugging techniques

Debugging
# API test debugging
describe('API', () => {
  it('should return data', async () => {
    const response = await request(app)
      .get('/api/data')
      .expect(200);
    console.log('Response:', response.body);
  });
});

# Component test debugging
describe('Component', () => {
  it('should update state', () => {
    const wrapper = mount(Component);
    console.log('Initial state:', wrapper.state());
    wrapper.find('button').simulate('click');
    console.log('Updated state:', wrapper.state());
  });
});

E2E Test Debugging

E2E test debugging techniques

Debugging
# Cypress debugging
describe('Feature', () => {
  it('should work end-to-end', () => {
    cy.visit('/');
    cy.get('[data-testid="button"]').click();
    cy.get('[data-testid="result"]').should('be.visible');
  });
});

# Playwright debugging
test('should work end-to-end', async ({ page }) => {
  await page.goto('/');
  await page.click('[data-testid="button"]');
  await page.waitForSelector('[data-testid="result"]');
});

Debugging Tools

Browser Tools

Browser debugging tools

Debugging
# Chrome DevTools
// Elements panel
// Console panel
// Network panel
// Performance panel
// Memory panel

# Firefox Developer Tools
// Inspector
// Console
// Network
// Performance
// Memory

# Safari Web Inspector
// Elements
// Console
// Network
// Timeline
// Storage

IDE Tools

IDE debugging tools

Debugging
# VS Code debugging
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug Program",
      "program": "${workspaceFolder}/index.js"
    }
  ]
}

# WebStorm debugging
// Run configuration
// Debug configuration
// Breakpoints
// Watches
// Variables

CLI Tools

CLI debugging tools

Debugging
# Node.js debugging
node --inspect index.js
node --inspect-brk index.js

# Chrome debugging
chrome-devtools://devtools/bundled/inspector.html?ws=127.0.0.1:9229

# Logging tools
winston
pino
debug
morgan

Best Practices

Debugging Strategy

Debugging strategy and approach

Debugging
# Systematic approach
1. Reproduce the issue
2. Isolate the problem
3. Identify the cause
4. Fix the issue
5. Verify the fix

# Debugging checklist
- Check error messages
- Review logs
- Inspect state
- Test assumptions
- Verify fixes

Error Prevention

Error prevention techniques

Debugging
# Input validation
function validateInput(input) {
  if (!input) throw new Error('Input required');
  if (typeof input !== 'string') throw new Error('String expected');
  return input;
}

# Type checking
function processData(data) {
  if (!Array.isArray(data)) {
    throw new TypeError('Array expected');
  }
  return data.map(item => {
    if (typeof item !== 'object') {
      throw new TypeError('Object expected');
    }
    return item;
  });
}

Debugging Tips

Debugging tips and tricks

Debugging
# General tips
- Use source maps
- Enable strict mode
- Add proper logging
- Use debugger statements
- Check browser console

# Performance tips
- Use performance marks
- Monitor memory usage
- Profile CPU usage
- Check network requests
- Analyze bundle size

Debugging - Interactive Developer Reference

Hover over code blocks to copy or run in live playground