Currently supported Go versions: V1.22.0 and V1.26.0.

Introduction to CodeBull

CodeBull is a VS Code extension that brings dynamic observability to your Go applications. It allows developers to inject logs, metrics, and traces into a running application without rewriting code, rebuilding binary, or restarting the process.

Traditional debugging often involves adding print statements, recompiling, and restarting the app. CodeBull eliminates this friction by leveraging runtime instrumentation techniques.

Core Concepts

Dynamic Instrumentation

The ability to modify the behavior of a running program by injecting code at specific points (e.g., function entry/exit, specific lines). CodeBull uses this to insert observability hooks safely.

Agent Preview

Planned starting point

This upcoming feature is being designed for the moment when something already feels wrong but you do not yet know where to inspect. A latency spike, an unexpected branch, noisy logs, or a missing response are all examples the preview is intended to support.

Planned guidance flow

When several signals look relevant, the future Agent is planned to help you decide whether logs, metrics, dashboards, or flamegraphs are the most useful next step for the question you are trying to answer.

Planned team handoff support

We also plan for the Agent to help turn scattered observations into a short summary after a debugging session, making handoff notes, incident follow-up, and team updates easier.

Key Features

Dynamic Logging

Inject log statements anywhere in your code. Capture variable values, function arguments, and return values.

Dynamic Logging Example

Instant Metrics

Monitor the performance and behavior of your application in real-time. Add counters to track how often a line of code is executed, or gauges to track the value of a variable over time.

Profiling (Coming Soon)

Generate CPU and memory profiles on-demand directly from VS Code. Visualize flame graphs to identify bottlenecks.

FAQ

Does it work with optimized binaries?
Yes, CodeBull supports optimized binaries, though some variable values might be optimized away.
Is there a performance overhead?
Minimal overhead is introduced only at the instrumentation points. When no points are active, overhead is zero.(Continuous improving)