A static race detector for Go that analyzes code without execution to find data races in pointers and concurrency patterns.
Chronos is a static race detector for the Go programming language. It analyzes Go source code to identify potential data races in concurrent programs without requiring execution, helping developers find concurrency bugs that might only appear in production environments. The tool focuses on detecting races involving pointers and various Go concurrency patterns.
Go developers working on concurrent applications who need to identify hard-to-find data races, particularly those building systems with complex pointer usage and goroutine synchronization.
Chronos complements Go's built-in race detector by using static analysis to find races that dynamic testing might miss, especially those that occur under specific production workloads. It provides an additional layer of race detection that doesn't require contrived synchronization or specific execution paths.
Chronos - A static race detector for the go language
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Identifies data races on pointers that are passed throughout the program, handling cases where shared memory is accessed across goroutines without execution.
Supports analysis of conditional branches, nested functions, interfaces, select statements, gotos, defers, for loops, and recursions, making it robust for intricate Go code.
Detects races without requiring program execution, uncovering issues that might only appear under specific production workloads, which dynamic tools like Go race can miss.
Effectively identifies synchronization problems involving mutexes and goroutine starts, key for common Go concurrency patterns.
Does not support detection of races involving channels, waitgroups, sync.Once, sync.Cond, or atomic operations, which are essential parts of Go's concurrency toolkit.
Can experience stack overflow errors when analyzing large programs or those with many external packages, restricting its use in big codebases.
Reports only 60.5% of the test cases covered by Go's built-in race detector, meaning it misses many potential data races due to static limitations and partial feature support.