The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
You can spend an entire productive day as a developer without adding a line to a source file. The work may be locating an implementation in an unfamiliar repository, running a test, reviewing a change, proving why a process took the wrong branch, investigating a teammate’s failure, or checking what a browser actually did. Five tools map cleanly to those jobs: Sourcegraph for repository-wide search, Visual Studio Code for running and reviewing work, LLDB for runtime causality, Visual Studio Live Share for shared investigation, and Firefox DevTools for browser behavior. Together they cover the questions behind most debugging and maintenance tasks. They are not code generators; they are instruments for building enough context to make a sound decision.
What developer tools help when the job is more than typing code?
Developer work has several distinct information problems, and each tool below is strongest at a different one. Treating them as interchangeable creates wasted motion: a text editor cannot show a paused process’s state, while a debugger cannot quickly reveal every caller of a function across a monorepo.
- Repository relationships: find an implementation, its callers, and likely change impact.
- Workflow evidence: run commands and tests, inspect diagnostics, and review exactly what changed.
- Runtime causality: stop execution at a precise point and inspect state without modifying source.
- Shared context: let another person inspect the same project and debugging session.
- Browser behavior: observe JavaScript, events, network-triggered execution, and exceptions in the client runtime.
The practical sequence is often cumulative: search to locate the relevant path, run or reproduce it, pause the process, bring in a colleague if the cause is unclear, and then verify the client-side result in browser tools.
Recommended Free Tools
Which tool answers each everyday developer question?
The table separates the tools by the question they answer, how quickly they provide evidence, and where their context stops. “Immediate” means the result appears as soon as you search or inspect; it does not mean the underlying problem is solved.
#1 Best Overall
| Tool | Primary question | Feedback speed | Context depth | Collaboration | Platform scope |
|---|---|---|---|---|---|
| Sourcegraph | Where is this implemented, and what depends on it? | Immediate search and navigation | Repository-wide relationships | Review-oriented workflows | Many languages and stacks |
| Visual Studio Code workflow surface | What command, test, or change can I run or review next? | Immediate for commands, diagnostics, and diffs | Workspace files plus terminal, source control, debugger, and tests | Supports review and handoff | Many languages and stacks |
| LLDB | Why did the running program reach this state? | Precise but tied to a paused process | One process, its stack, and live variables | Primarily individual | Apple language environments and command-line workflows |
| Visual Studio Live Share | How can another person investigate this with me? | Depends on a second participant | Shared project context and session state | Purpose-built for co-investigation | Supported Visual Studio or Visual Studio Code integrations |
| Firefox DevTools JavaScript Debugger | What is the browser doing right now? | Immediate while the page runs or is paused | Client runtime, events, workers, and source maps | Primarily individual | Firefox browser context |
How do I search an unfamiliar codebase with Sourcegraph?
Use Sourcegraph when the first problem is orientation: locating a definition, finding every reference, or estimating the impact of a change before you touch a file. Its Deep Search, scalable code search, and code navigation features are designed for reading and connecting code, not merely matching a phrase.
Start with a behavior, not a filename
- Describe the behavior in a distinctive term: an error string, API route, configuration key, event name, or user-facing label.
- Open the most relevant result and use jump-to-definition to identify the implementation rather than assuming the first match is authoritative.
- Use find-references to see callers, tests, adapters, and documentation that depend on the symbol.
- Trace both directions: follow the inputs into the function and the outputs toward the observed symptom.
- Record the files and boundaries you found before moving to an editor or debugger; this prevents investigating a similarly named but unrelated component.
What Sourcegraph is particularly good at
It answers “Where is this implemented?”, “What calls this function?”, and “What will this change affect?” across a repository or collection of repositories. That repository-level view is deeper than opening one folder and using a local text search. It is useful during review because you can inspect examples and related implementations before deciding whether a change is consistent.
Sourcegraph’s getting-started documentation reports that “Developers use it on average for 5.3 sessions each day.” The page does not state a publication year, and the figure describes Sourcegraph usage rather than developer-tool usage in general.
Free tools Windows power users keep installed
One-click scans. No signup required.
Where search stops
Search reveals relationships in stored source; it does not prove which branch a running process took, what value a variable held, or whether a browser event fired. Once you have a plausible path, switch to a debugger, test run, or browser investigation to establish runtime facts.
How can Visual Studio Code help me run, inspect, and review work?
Visual Studio Code is useful here as a workbench rather than a writing assistant. Its single workspace surface brings together files, code intelligence, an integrated terminal, source control, a debugger, and test results, so you can move from an observation to evidence without changing applications.
Rank #2
Use the integrated terminal in workspace context
- Open the repository folder in Visual Studio Code.
- Choose Terminal > New Terminal and confirm that the shell starts in the intended workspace.
- Run the project’s existing build, test, lint, or diagnostic command from that terminal.
- Read the command output alongside the files and diagnostics it references; keep the exact failing input and error text for reproduction.
The terminal’s advantage is context: commands, paths, environment assumptions, and the files you inspect remain in one workspace. It does not replace a dedicated debugger when you need to see state between statements.
Review a change before treating it as the fix
- Open the Source Control view to inspect changed files and inline differences.
- Check that each hunk corresponds to the behavior you intended to alter; unrelated edits are a review signal.
- Stage only the changes that belong together, then review the staged diff again.
- Use branch or worktree support when you need to isolate investigations, and resolve merge conflicts by examining both sides rather than accepting an entire block blindly.
- Run the relevant tests and inspect their results before committing.
This workflow makes “what changed?” and “what evidence do I have?” answerable in the same place. Source control review is also useful when you are not the author: inline differences expose assumptions that a ticket summary may omit.
Know what the editor cannot establish
Diagnostics and test output tell you what a tool reported under a particular run. They do not automatically explain a timing race or an unexpected value. For that, launch a debugger and inspect the process at the point where behavior diverges.
What is the difference between a debugger and an editor?
An editor shows the program text; a debugger shows a running program’s state and control flow. LLDB is the instrument to use when the key question is “Why did execution do that?” rather than “Where is this code written?”
How LLDB establishes runtime causality
- Reproduce the failure or surprising behavior under a debuggable build.
- Set a breakpoint at the function, source location, or condition where the relevant decision should occur.
- Run until the breakpoint pauses execution.
- Inspect the call stack to learn how execution arrived there, then examine local variables and other visible state.
- Step over a statement to observe its effect, step into a called function when its internals matter, or step out when you have enough evidence.
- Compare the state at successive pauses with the expected invariant; the first divergence is usually more valuable than the final symptom.
- Resume, add a narrower breakpoint or watch expression if needed, and repeat until the causal path is clear.
Apple’s LLDB Debugging Guide describes the principle precisely: “The most important tool of debugging is the debugger, which helps you understand how your program behaves at runtime, without modifying the code.” LLDB can control execution with breakpoints and let you inspect or modify state while execution is paused, including stepping over, into, or out of statements.
Rank #3
When LLDB is a better choice than logging
Logging records values you anticipated might matter and requires another run after every instrumentation change. A debugger lets you pause at an existing location, inspect surrounding state, and test the order of calls without editing the source. Logging remains useful for long-running or distributed systems where pausing is impractical; LLDB is strongest when a local process can be reproduced.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Its boundary
LLDB focuses on one running process. It does not provide repository-wide dependency discovery or another person’s interpretation. Use Sourcegraph before the session to find the path, and Live Share when the investigation needs a second engineer.
How can I debug with a teammate remotely using Visual Studio Live Share?
Live Share turns a one-person investigation into a shared project session. Microsoft lists seeking help on an issue, resolving a bug, pair programming, coding interviews, mentoring, and ad-hoc reviews as use cases. The important distinction from chat or screen sharing is shared context: a collaborator can inspect the project, follow your navigation, and participate in debugging or terminal work.
A practical shared-debugging sequence
- Open the project in a supported Visual Studio or Visual Studio Code integration and start a Live Share session.
- Invite the teammate with the session link, confirming what project and branch are open before discussing symptoms.
- Reproduce the issue while both participants can inspect the same files and navigation context.
- Share the debugging session when the problem depends on runtime state; let the teammate inspect variables or control stepping according to the access you grant.
- Use the shared terminal for commands that need the same workspace context, while stating which commands can change files or external systems.
- End by recording the hypothesis, evidence, and next test in the issue or review so the result survives the session.
Live Share versus a screen share
A screen share shows pixels from one machine. Live Share supplies navigable project context and can expose the same debugging session, so the second person can inspect a variable or follow a call path instead of asking the host to perform every click. That reduces narration overhead, but it also means you should review permissions and avoid running destructive commands in a shared terminal.
When collaboration is not the answer
If the question is a quick definition lookup or a self-contained browser exception, Sourcegraph or Firefox DevTools will usually be faster. Invite another person when competing hypotheses, unfamiliar ownership, or a difficult reproduction makes independent context more valuable than solo speed.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →How do I inspect JavaScript in the browser with Firefox DevTools?
Firefox DevTools is for the client runtime: what JavaScript executed, which event triggered it, what values changed, and where an exception interrupted the flow. It complements server-side logs and debuggers rather than replacing them.
Trace a browser behavior
- Open Firefox DevTools and select the JavaScript Debugger.
- Locate the relevant source; use source maps when the page ships bundled or minified files so the view corresponds to authored modules.
- Set an ordinary breakpoint at the handler or function that should run.
- Reload or reproduce the action, then inspect the paused values and call stack.
- Step through statements to distinguish event ordering from data errors.
- Add a conditional breakpoint when a handler runs repeatedly but only one input is faulty.
- Enable break on exceptions to stop at the throw site instead of examining only the later failure.
- Use event-listener or XHR breakpoints when the trigger is an interaction or a request rather than a direct function call.
- Add watch expressions or watchpoints for values that change unexpectedly, and inspect workers when work runs off the main thread.
What this reveals
The debugger can expose event timing, client-side state transitions, worker execution, and the exact statement associated with an exception. It is especially valuable when a server response is correct but the interface displays the wrong result, or when a race appears only after several asynchronous events.
What it cannot prove
Browser tools show one client’s execution under one set of inputs and conditions. They do not establish that a backend process behaved correctly, that another browser has identical timing, or that a source-map view matches production code unless the deployed maps are trustworthy. Pair the observation with network, server, or repository evidence.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.How should I choose the right tool for a debugging question?
Choose by the unknown you need to eliminate, not by product popularity. The fastest route is usually the tool whose evidence type matches the question.
| If you are asking… | Start with… | Then move to… |
|---|---|---|
| Where is this behavior implemented? | Sourcegraph search and navigation | Visual Studio Code to run or review the path |
| What changed, and did the test actually cover it? | Visual Studio Code Source Control and test results | LLDB if the failing state remains unexplained |
| Why did this value or branch occur? | LLDB breakpoints and stepping | Live Share if another perspective is needed |
| Can someone investigate the same reproduction with me? | Visual Studio Live Share | LLDB or the shared terminal inside that session |
| Why does the page behave differently from the server response? | Firefox DevTools JavaScript Debugger | Sourcegraph or backend logs for the originating code path |
A disciplined handoff preserves the evidence: the search result or symbol, the reproduction command, the breakpoint location, the observed value, and the next test. That record prevents a teammate from repeating exploration that has already been completed.
Best Value
What common mistakes make these tools less useful?
- Searching too broadly: begin with a distinctive behavior or symbol, then narrow by repository, language, or path.
- Confusing text with behavior: a matching line does not prove it ran; use a breakpoint or a reproducible test.
- Stopping at the final symptom: inspect the first state that diverges from the expected invariant.
- Sharing without a reproduction: Live Share cannot compensate for an unclear trigger; write the exact input and sequence first.
- Debugging minified browser code blindly: confirm source maps and use conditional or event breakpoints to reduce noise.
- Treating a diff as a verdict: review staged changes and test results; a small diff can still alter a critical path.
- Ignoring scope: LLDB and Firefox DevTools expose one runtime, while Sourcegraph exposes stored relationships. Neither view alone is complete.
What do these five tools change about developer work?
They make non-writing work explicit and repeatable. Sourcegraph reduces the cost of understanding an unfamiliar repository; Visual Studio Code keeps commands, tests, diagnostics, and review evidence together; LLDB turns a vague runtime symptom into an observed state transition; Live Share adds a colleague to the same investigation; and Firefox DevTools makes browser execution inspectable. The right tool is the one that answers the current question with the least unproven assumption.
Frequently Asked Questions
Do I need all five tools on every project?
No. Start with the tool that matches your current boundary: repository search for orientation, a debugger for a reproducible process, Live Share for a shared investigation, or Firefox DevTools for client behavior. A small project may use only an editor workflow and browser tools, while a large monorepo benefits from repository-wide navigation.
Can a debugger change my program while I investigate it?
A debugger can let you inspect state without editing source, and LLDB also supports modifying state while execution is paused. Treat any modified state as an experiment, not as proof of how the unmodified program behaves, and reproduce the result from a clean run before drawing a conclusion.
Why do browser breakpoints sometimes appear not to work?
The page may be executing a bundled or worker-loaded file rather than the source file you opened. Check source maps, confirm the event or request actually occurs, and use exception, event-listener, or XHR breakpoints when a normal function breakpoint is bypassed.
Is Live Share safe for sensitive repositories?
Review the session’s access and your organization’s policy before inviting anyone. Shared project context and terminals can expose files or permit commands, so use a least-privilege account, avoid secrets in the workspace, and end the session when the investigation is complete.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

