vscode-bug-hunter

This skill enables systematic discovery and detection of bugs in VS Code extensions before they cause problems in production. It provides structured workflows for proactively finding issues through static analysis, pattern matching, code auditing, and systematic investigation techniques.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "vscode-bug-hunter" with this command: npx skills add s-hiraoku/vscode-sidebar-terminal/s-hiraoku-vscode-sidebar-terminal-vscode-bug-hunter

VS Code Bug Hunter

Overview

This skill enables systematic discovery and detection of bugs in VS Code extensions before they cause problems in production. It provides structured workflows for proactively finding issues through static analysis, pattern matching, code auditing, and systematic investigation techniques.

When to Use This Skill

  • Proactively searching for bugs in extension code

  • Auditing code for potential issues before release

  • Investigating suspicious behavior patterns

  • Analyzing code for memory leaks, race conditions, or security vulnerabilities

  • Performing systematic code reviews

  • Finding bugs that haven't manifested yet

  • Preparing for release by identifying hidden issues

Bug Hunting vs Debugging

Bug Hunting (This Skill) Debugging (vscode-extension-debugger)

Proactive discovery Reactive fixing

Find bugs before they manifest Fix bugs after they occur

Static and dynamic analysis Error investigation

Code auditing Stack trace analysis

Pattern-based detection Reproduction-based fixing

Bug Detection Workflow

Phase 1: Reconnaissance

Gather intelligence about the codebase before hunting.

1.1 Map the Codebase Structure

Find all TypeScript files

find src -name "*.ts" | head -20

Identify key components

grep -r "export class" src/ --include="*.ts" | head -20

Find entry points

grep -r "activate|deactivate" src/ --include="*.ts"

1.2 Identify High-Risk Areas

High-risk areas are more likely to contain bugs:

Area Risk Level Reason

Async operations High Race conditions, unhandled rejections

Event handlers High Memory leaks, missing dispose

WebView communication High Message timing, state sync

File I/O Medium Error handling, permissions

User input processing Medium Validation, injection

Configuration handling Medium Type mismatches, defaults

UI rendering Low Visual issues, layout

1.3 Review Recent Changes

Recent commits - often contain fresh bugs

git log --oneline -20

Files changed recently

git diff --name-only HEAD~10

Diff for specific file

git diff HEAD~5 -- src/path/to/suspicious/file.ts

Phase 2: Static Analysis

Analyze code without executing it.

2.1 Pattern-Based Bug Detection

Search for known bug patterns:

Memory Leak Patterns

// Pattern: Event listener without dispose // Search: addEventListener|on\w+\s*( // Risk: Memory leak if listener not removed

// Pattern: setInterval/setTimeout without clear // Search: setInterval|setTimeout // Risk: Timer continues after disposal

// Pattern: Missing dispose registration // Search: vscode.\w+.on\w+( // Risk: Event handler leaks

Race Condition Patterns

// Pattern: Shared mutable state without lock // Search: private \w+ = (?!readonly) // Risk: Concurrent modification

// Pattern: Check-then-act without atomicity // Search: if (.)\s{[^}]*await // Risk: State may change between check and act

// Pattern: Promise without await in loop // Search: for.{[^}](?<!await)\s+\w+([^)]*) // Risk: Uncontrolled concurrency

Null/Undefined Patterns

// Pattern: Optional chaining missing // Search: .\w+.\w+.\w+(?!?) // Risk: Null reference in chain

// Pattern: Type assertion without check // Search: as \w+(?!\s*|) // Risk: Runtime type mismatch

// Pattern: Array access without bounds check // Search: [\d+]|[.*](?!?) // Risk: Index out of bounds

2.2 Automated Search Commands

Find potential memory leaks

grep -rn "addEventListener|setInterval|setTimeout" src/ --include="*.ts"

Find missing error handling

grep -rn "catch\s*{\s*}" src/ --include="*.ts"

Find TODO/FIXME comments (often mark known issues)

grep -rn "TODO|FIXME|HACK|BUG|XXX" src/ --include="*.ts"

Find console.log (should be removed in production)

grep -rn "console.(log|debug|info)" src/ --include="*.ts"

Find async functions without try-catch

grep -rn "async.{" src/ --include=".ts" | head -20

2.3 TypeScript Compiler Analysis

Strict type checking

npx tsc --noEmit --strict

Find implicit any

npx tsc --noEmit --noImplicitAny

Check for unused variables

npx tsc --noEmit --noUnusedLocals --noUnusedParameters

Phase 3: Semantic Analysis

Understand code behavior beyond syntax.

3.1 Control Flow Analysis

Trace execution paths to find issues:

// Identify all entry points to a function // Search for: functionName(

// Trace data flow through function // What inputs can reach this code path? // What state can this code modify?

// Find unreachable code // Code after return/throw/break/continue

3.2 State Analysis

Track state changes:

// Questions to ask: // 1. What state does this component manage? // 2. What operations modify this state? // 3. Can state become inconsistent? // 4. Is state properly initialized? // 5. Is state properly cleaned up?

3.3 Lifecycle Analysis

Verify proper lifecycle management:

// For each resource: // 1. Where is it created? // 2. Where is it disposed? // 3. Can disposal be skipped? // 4. Is disposal order correct? // 5. Are references cleared after disposal?

Phase 4: Dynamic Analysis

Analyze code behavior during execution.

4.1 Runtime Monitoring

Add temporary instrumentation:

// Wrap suspicious function to monitor calls const original = object.suspiciousMethod; object.suspiciousMethod = function(...args) { console.log('[MONITOR] suspiciousMethod called with:', args); const result = original.apply(this, args); console.log('[MONITOR] suspiciousMethod returned:', result); return result; };

4.2 Memory Profiling

// Track object creation const instances = new WeakSet(); const originalConstructor = SuspiciousClass; SuspiciousClass = class extends originalConstructor { constructor(...args) { super(...args); instances.add(this); console.log('[MEMORY] New instance created, count:', instances.size); } };

4.3 Performance Profiling

// Measure function execution time const start = performance.now(); await suspiciousOperation(); const duration = performance.now() - start; console.log([PERF] Operation took ${duration}ms);

Phase 5: Hypothesis Testing

Form and test hypotheses about potential bugs.

5.1 Hypothesis Formation

Template: IF [condition/action] THEN [expected buggy behavior] BECAUSE [root cause theory]

Example: IF rapid terminal creation requests are made THEN duplicate terminals may be created BECAUSE there is no atomic lock on the creation operation

5.2 Test Design

// Design test to confirm hypothesis describe('Bug Hypothesis: Rapid terminal creation causes duplicates', () => { it('should handle concurrent creation requests', async () => { const manager = new TerminalManager();

// Trigger the suspected bug condition
const results = await Promise.all([
  manager.createTerminal(),
  manager.createTerminal(),
  manager.createTerminal()
]);

// Verify expected behavior
const uniqueIds = new Set(results.map(t => t.id));
expect(uniqueIds.size).toBe(results.length);

}); });

Bug Categories Reference

Category 1: Resource Leaks

Memory Leaks

  • Event listeners not removed

  • Timers not cleared

  • References not nullified

  • Closures capturing large objects

Handle Leaks

  • File handles not closed

  • WebView panels not disposed

  • Terminal processes not killed

  • Watchers not stopped

Category 2: Concurrency Issues

Race Conditions

  • Check-then-act patterns

  • Shared mutable state

  • Non-atomic operations

  • Missing synchronization

Deadlocks

  • Circular dependencies

  • Nested locks

  • Resource contention

Category 3: State Issues

Invalid State

  • Uninitialized variables

  • Stale state references

  • Inconsistent state transitions

  • Missing state validation

State Corruption

  • Concurrent modification

  • Partial updates

  • Missing rollback on failure

Category 4: Error Handling Issues

Missing Error Handling

  • Uncaught exceptions

  • Unhandled promise rejections

  • Silent failures

  • Missing validation

Incorrect Error Handling

  • Swallowed errors

  • Wrong error type caught

  • Incomplete cleanup on error

Category 5: Security Issues

Injection Vulnerabilities

  • Command injection

  • Path traversal

  • XSS in WebView

Information Disclosure

  • Sensitive data in logs

  • Error messages revealing internals

  • Debug information in production

Quick Reference Commands

Find Memory Leaks

grep -rn "addEventListener|on.*=.function" src/ --include=".ts" | grep -v "dispose|remove"

Find Missing Error Handling

grep -rn ".then(" src/ --include="*.ts" | grep -v ".catch("

Find Potential Race Conditions

grep -rn "async.{" src/ --include=".ts" -A 5 | grep -E "if.{|while.{"

Find Security Issues

grep -rn "eval|innerHTML|child_process|exec(" src/ --include="*.ts"

Find Code Smells

grep -rn "any|@ts-ignore|@ts-nocheck" src/ --include="*.ts"

Investigation Workflow Summary

  • Reconnaissance: Map codebase, identify high-risk areas

  • Static Analysis: Search for known bug patterns

  • Semantic Analysis: Understand control flow and state

  • Dynamic Analysis: Monitor runtime behavior

  • Hypothesis Testing: Form and test bug theories

  • Documentation: Record findings for fixing

Resources

For detailed reference documentation:

  • references/detection-patterns.md

  • Comprehensive bug pattern catalog

  • references/analysis-tools.md

  • Static and dynamic analysis tool guide

  • references/investigation-checklist.md

  • Systematic investigation procedures

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

vscode-extension-expert

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

vscode-extension-refactorer

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

vscode-webview-expert

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

vscode-extension-debugger

No summary provided by upstream source.

Repository SourceNeeds Review