microscope is a native debugger and profiler for Linux x86-64. It understands C, C++, Rust, Go, Zig, Odin, Fortran, D, Nim, and Ada programs. You can use it in a terminal, in a browser, or through an editor that supports the Debug Adapter Protocol.
microscope is under active development. It does not have a supported installation method or stable release yet.
- Getting started
- Debugging programs
- Using the browser
- Using an editor
- Recording and reading profiles
- Tracing system calls
- Expressions
- Views and writing views
- Supported languages
- Command-line reference
- Configuration reference
- Troubleshooting
- Known limits
microscope can launch a program, attach to a running process, or inspect a core dump. It supports source and instruction stepping, conditional breakpoints, hardware watchpoints, stack traces, expressions, memory, registers, and disassembly.
It presents common containers as their contents instead of their internal fields. It also understands Go goroutines and async Rust tasks. The profiler can record native and logical stacks and open them in the browser interface.
microscope syscalls traces the system calls a program makes, as strace does.
By default it uses eBPF, so the traced program never stops.
When debug information or memory is missing, microscope reports what it could not read. It does not fill gaps with guessed values.
microscope currently runs on Linux x86-64, version 3.8 or newer. Some features need a newer kernel: catchpoints and the ptrace syscall engine need 5.3, the BPF syscall engine 5.15, and the profiler 6.0.
To read thread-local variables in a program that uses glibc, microscope needs glibc 2.27 or newer. Before glibc 2.34, the program must also have loaded libpthread.
See known limits for details about targets, debug information, and editor support.
Development uses the pinned Nix environment:
just devRead AGENTS.md before changing the project. It links to the detailed developer documentation.
Licensed under either MIT or Apache-2.0, at your option.