GCatch

command module
v0.0.0-...-c039653 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2021 License: GPL-2.0 Imports: 17 Imported by: 0

README

GCatch: Automatically Detecting Concurrency Bugs in Go

Descriptions

GCatch contains a suite of static detectors aiming to identify concurrency bugs in large, real Go software systems. Concurrency bugs covered by the current version of GCatch include blocking misuse-of-channel (BMOC) bugs, deadlocks caused by misuse of mutexes (\eg, lock-with-unlock, double lock), races on struct fields, and races due to errors when using the testing package. The technical details of GCatch are presented in Section 3 of our ASPLOS paper [1].

Installation and Demonstration

GCatch leverages Z3 for constraint solving. If you have already installed Z3, you can use the install.sh script is to install GCatch. You can also install Z3 together with GCatch using the installZ3.sh script.

After the installation, you can run the run.sh script to execute GCatch on a buggy version of gRPC.

Directories

  1. Directory analysis contains static analysis routines shared by multiple checkers (e.g., computing post-dominator).

  2. Directory checkers contains code for implementing the checking functionalities.

  3. Directory cmd is the entry point of GCatch.

  4. Directory config contains configuration files of GCatch.

  5. Directory instinfo contains code for analyzing Go SSA instructions.

  6. Directory output contains code for printing the detection results.

  7. Directory path contains code for computation conducted on CFG.

  8. Directory ssabuild contains code for transforming input programs into SSA.

  9. Directory syncgraph contains code for interaction with call graph, alias analysis, and Z3.

  10. Directory testdata contains a buggy version of gRPC.

  11. Directory tests contains toy programs to test traditional checkers.

  12. Directory tools contains copies of external packages.

  13. Directory util contains utility code shared by different components of GCatch.

Please refer to the demonstration scripts to figure out how to use GCatch’s code.

[1] Ziheng Liu, Shuofei Zhu, Boqin Qin, Hao Chen and Linhai Song. “Automatically Detecting and Fixing Concurrency Bugs in Go Software Systems.” In ASPLOS’2020.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
checkers
tests
tools
container/intsets
Package intsets provides Sparse, a compact and fast representation for sparse sets of int values.
Package intsets provides Sparse, a compact and fast representation for sparse sets of int values.
github.com/aclements/go-z3/st
Package st provides symbolic equivalents of basic Go types.
Package st provides symbolic equivalents of basic Go types.
github.com/aclements/go-z3/z3
Package z3 checks the satisfiability of logical formulas.
Package z3 checks the satisfiability of logical formulas.
github.com/aclements/go-z3/z3/z3log
Package z3log exposes Z3's interaction log.
Package z3log exposes Z3's interaction log.
go/analysis
The analysis package defines the interface between a modular static analysis and an analysis driver program.
The analysis package defines the interface between a modular static analysis and an analysis driver program.
go/analysis/analysistest
Package analysistest provides utilities for testing analyzers.
Package analysistest provides utilities for testing analyzers.
go/analysis/cmd/vet
The vet command is a static checker for Go programs.
The vet command is a static checker for Go programs.
go/analysis/internal/analysisflags
Package analysisflags defines helpers for processing flags of analysis driver tools.
Package analysisflags defines helpers for processing flags of analysis driver tools.
go/analysis/internal/checker
Package checker defines the implementation of the checker commands.
Package checker defines the implementation of the checker commands.
go/analysis/internal/facts
Package facts defines a serializable set of analysis.Fact.
Package facts defines a serializable set of analysis.Fact.
go/analysis/multichecker
Package multichecker defines the main function for an analysis driver with several analyzers.
Package multichecker defines the main function for an analysis driver with several analyzers.
go/analysis/passes/asmdecl
Package asmdecl defines an Analyzer that reports mismatches between assembly files and Go declarations.
Package asmdecl defines an Analyzer that reports mismatches between assembly files and Go declarations.
go/analysis/passes/assign
Package assign defines an Analyzer that detects useless assignments.
Package assign defines an Analyzer that detects useless assignments.
go/analysis/passes/atomic
Package atomic defines an Analyzer that checks for common mistakes using the sync/atomic package.
Package atomic defines an Analyzer that checks for common mistakes using the sync/atomic package.
go/analysis/passes/atomicalign
Package atomicalign defines an Analyzer that checks for non-64-bit-aligned arguments to sync/atomic functions.
Package atomicalign defines an Analyzer that checks for non-64-bit-aligned arguments to sync/atomic functions.
go/analysis/passes/bools
Package bools defines an Analyzer that detects common mistakes involving boolean operators.
Package bools defines an Analyzer that detects common mistakes involving boolean operators.
go/analysis/passes/buildssa
Package buildssa defines an Analyzer that constructs the SSA representation of an error-free package and returns the set of all functions within it.
Package buildssa defines an Analyzer that constructs the SSA representation of an error-free package and returns the set of all functions within it.
go/analysis/passes/buildtag
Package buildtag defines an Analyzer that checks build tags.
Package buildtag defines an Analyzer that checks build tags.
go/analysis/passes/cgocall
Package cgocall defines an Analyzer that detects some violations of the cgo pointer passing rules.
Package cgocall defines an Analyzer that detects some violations of the cgo pointer passing rules.
go/analysis/passes/composite
Package composite defines an Analyzer that checks for unkeyed composite literals.
Package composite defines an Analyzer that checks for unkeyed composite literals.
go/analysis/passes/copylock
Package copylock defines an Analyzer that checks for locks erroneously passed by value.
Package copylock defines an Analyzer that checks for locks erroneously passed by value.
go/analysis/passes/ctrlflow
Package ctrlflow is an analysis that provides a syntactic control-flow graph (CFG) for the body of a function.
Package ctrlflow is an analysis that provides a syntactic control-flow graph (CFG) for the body of a function.
go/analysis/passes/deepequalerrors
Package deepequalerrors defines an Analyzer that checks for the use of reflect.DeepEqual with error values.
Package deepequalerrors defines an Analyzer that checks for the use of reflect.DeepEqual with error values.
go/analysis/passes/errorsas
The errorsas package defines an Analyzer that checks that the second arugment to errors.As is a pointer to a type implementing error.
The errorsas package defines an Analyzer that checks that the second arugment to errors.As is a pointer to a type implementing error.
go/analysis/passes/findcall
The findcall package defines an Analyzer that serves as a trivial example and test of the Analysis API.
The findcall package defines an Analyzer that serves as a trivial example and test of the Analysis API.
go/analysis/passes/findcall/cmd/findcall
The findcall command runs the findcall analyzer.
The findcall command runs the findcall analyzer.
go/analysis/passes/httpresponse
Package httpresponse defines an Analyzer that checks for mistakes using HTTP responses.
Package httpresponse defines an Analyzer that checks for mistakes using HTTP responses.
go/analysis/passes/inspect
Package inspect defines an Analyzer that provides an AST inspector (github.com/godaner/GCatch/tools/go/ast/inspect.Inspect) for the syntax trees of a package.
Package inspect defines an Analyzer that provides an AST inspector (github.com/godaner/GCatch/tools/go/ast/inspect.Inspect) for the syntax trees of a package.
go/analysis/passes/internal/analysisutil
Package analysisutil defines various helper functions used by two or more packages beneath go/analysis.
Package analysisutil defines various helper functions used by two or more packages beneath go/analysis.
go/analysis/passes/loopclosure
Package loopclosure defines an Analyzer that checks for references to enclosing loop variables from within nested functions.
Package loopclosure defines an Analyzer that checks for references to enclosing loop variables from within nested functions.
go/analysis/passes/lostcancel
Package lostcancel defines an Analyzer that checks for failure to call a context cancelation function.
Package lostcancel defines an Analyzer that checks for failure to call a context cancelation function.
go/analysis/passes/lostcancel/cmd/lostcancel
The lostcancel command applies the github.com/godaner/GCatch/tools/go/analysis/passes/lostcancel analysis to the specified packages of Go source code.
The lostcancel command applies the github.com/godaner/GCatch/tools/go/analysis/passes/lostcancel analysis to the specified packages of Go source code.
go/analysis/passes/nilfunc
Package nilfunc defines an Analyzer that checks for useless comparisons against nil.
Package nilfunc defines an Analyzer that checks for useless comparisons against nil.
go/analysis/passes/nilness
Package nilness inspects the control-flow graph of an SSA function and reports errors such as nil pointer dereferences and degenerate nil pointer comparisons.
Package nilness inspects the control-flow graph of an SSA function and reports errors such as nil pointer dereferences and degenerate nil pointer comparisons.
go/analysis/passes/nilness/cmd/nilness
The nilness command applies the github.com/godaner/GCatch/tools/go/analysis/passes/nilness analysis to the specified packages of Go source code.
The nilness command applies the github.com/godaner/GCatch/tools/go/analysis/passes/nilness analysis to the specified packages of Go source code.
go/analysis/passes/pkgfact
The pkgfact package is a demonstration and test of the package fact mechanism.
The pkgfact package is a demonstration and test of the package fact mechanism.
go/analysis/passes/shadow/cmd/shadow
The shadow command runs the shadow analyzer.
The shadow command runs the shadow analyzer.
go/analysis/passes/shift
Package shift defines an Analyzer that checks for shifts that exceed the width of an integer.
Package shift defines an Analyzer that checks for shifts that exceed the width of an integer.
go/analysis/passes/stdmethods
Package stdmethods defines an Analyzer that checks for misspellings in the signatures of methods similar to well-known interfaces.
Package stdmethods defines an Analyzer that checks for misspellings in the signatures of methods similar to well-known interfaces.
go/analysis/passes/structtag
Package structtag defines an Analyzer that checks struct field tags are well formed.
Package structtag defines an Analyzer that checks struct field tags are well formed.
go/analysis/passes/tests
Package tests defines an Analyzer that checks for common mistaken usages of tests and examples.
Package tests defines an Analyzer that checks for common mistaken usages of tests and examples.
go/analysis/passes/unmarshal
The unmarshal package defines an Analyzer that checks for passing non-pointer or non-interface types to unmarshal and decode functions.
The unmarshal package defines an Analyzer that checks for passing non-pointer or non-interface types to unmarshal and decode functions.
go/analysis/passes/unmarshal/cmd/unmarshal
The unmarshal command runs the unmarshal analyzer.
The unmarshal command runs the unmarshal analyzer.
go/analysis/passes/unreachable
Package unreachable defines an Analyzer that checks for unreachable code.
Package unreachable defines an Analyzer that checks for unreachable code.
go/analysis/passes/unsafeptr
Package unsafeptr defines an Analyzer that checks for invalid conversions of uintptr to unsafe.Pointer.
Package unsafeptr defines an Analyzer that checks for invalid conversions of uintptr to unsafe.Pointer.
go/analysis/passes/unusedresult
Package unusedresult defines an analyzer that checks for unused results of calls to certain pure functions.
Package unusedresult defines an analyzer that checks for unused results of calls to certain pure functions.
go/analysis/singlechecker
Package singlechecker defines the main function for an analysis driver with only a single analysis.
Package singlechecker defines the main function for an analysis driver with only a single analysis.
go/analysis/unitchecker
The unitchecker package defines the main function for an analysis driver that analyzes a single compilation unit during a build.
The unitchecker package defines the main function for an analysis driver that analyzes a single compilation unit during a build.
go/ast/astutil
Package astutil contains common utilities for working with the Go AST.
Package astutil contains common utilities for working with the Go AST.
go/ast/inspector
Package inspector provides helper functions for traversal over the syntax trees of a package, including node filtering by type, and materialization of the traversal stack.
Package inspector provides helper functions for traversal over the syntax trees of a package, including node filtering by type, and materialization of the traversal stack.
go/buildutil
Package buildutil provides utilities related to the go/build package in the standard library.
Package buildutil provides utilities related to the go/build package in the standard library.
go/callgraph
Package callgraph defines the call graph and various algorithms and utilities to operate on it.
Package callgraph defines the call graph and various algorithms and utilities to operate on it.
go/callgraph/cha
Package cha computes the call graph of a Go program using the Class Hierarchy Analysis (CHA) algorithm.
Package cha computes the call graph of a Go program using the Class Hierarchy Analysis (CHA) algorithm.
go/callgraph/rta
This package provides Rapid Type Analysis (RTA) for Go, a fast algorithm for call graph construction and discovery of reachable code (and hence dead code) and runtime types.
This package provides Rapid Type Analysis (RTA) for Go, a fast algorithm for call graph construction and discovery of reachable code (and hence dead code) and runtime types.
go/callgraph/static
Package static computes the call graph of a Go program containing only static call edges.
Package static computes the call graph of a Go program containing only static call edges.
go/cfg
This package constructs a simple control-flow graph (CFG) of the statements and expressions within a single function.
This package constructs a simple control-flow graph (CFG) of the statements and expressions within a single function.
go/expect
Package expect provides support for interpreting structured comments in Go source code as test expectations.
Package expect provides support for interpreting structured comments in Go source code as test expectations.
go/gccgoexportdata
Package gccgoexportdata provides functions for reading export data files containing type information produced by the gccgo compiler.
Package gccgoexportdata provides functions for reading export data files containing type information produced by the gccgo compiler.
go/gcexportdata
Package gcexportdata provides functions for locating, reading, and writing export data files containing type information produced by the gc compiler.
Package gcexportdata provides functions for locating, reading, and writing export data files containing type information produced by the gc compiler.
go/internal/gccgoimporter
Package gccgoimporter implements Import for gccgo-generated object files.
Package gccgoimporter implements Import for gccgo-generated object files.
go/internal/gcimporter
Package gcimporter provides various functions for reading gc-generated object files that can be used to implement the Importer interface defined by the Go 1.5 standard library package.
Package gcimporter provides various functions for reading gc-generated object files that can be used to implement the Importer interface defined by the Go 1.5 standard library package.
go/internal/packagesdriver
Package packagesdriver fetches type sizes for go/packages and go/analysis.
Package packagesdriver fetches type sizes for go/packages and go/analysis.
go/loader
Package loader loads a complete Go program from source code, parsing and type-checking the initial packages plus their transitive closure of dependencies.
Package loader loads a complete Go program from source code, parsing and type-checking the initial packages plus their transitive closure of dependencies.
go/mypointer
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
go/packages
Package packages loads Go packages for inspection and analysis.
Package packages loads Go packages for inspection and analysis.
go/packages/gopackages
The gopackages command is a diagnostic tool that demonstrates how to use github.com/godaner/GCatch/tools/go/packages to load, parse, type-check, and print one or more Go packages.
The gopackages command is a diagnostic tool that demonstrates how to use github.com/godaner/GCatch/tools/go/packages to load, parse, type-check, and print one or more Go packages.
go/packages/packagestest
Package packagestest creates temporary projects on disk for testing go tools on.
Package packagestest creates temporary projects on disk for testing go tools on.
go/pointer
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
go/ssa
Package ssa defines a representation of the elements of Go programs (packages, types, functions, variables and constants) using a static single-assignment (SSA) form intermediate representation (IR) for the bodies of functions.
Package ssa defines a representation of the elements of Go programs (packages, types, functions, variables and constants) using a static single-assignment (SSA) form intermediate representation (IR) for the bodies of functions.
go/ssa/interp
Package ssa/interp defines an interpreter for the SSA representation of Go programs.
Package ssa/interp defines an interpreter for the SSA representation of Go programs.
go/types/objectpath
Package objectpath defines a naming scheme for types.Objects (that is, named entities in Go programs) relative to their enclosing package.
Package objectpath defines a naming scheme for types.Objects (that is, named entities in Go programs) relative to their enclosing package.
go/types/typeutil
Package typeutil defines various utilities for types, such as Map, a mapping from types.Type to interface{} values.
Package typeutil defines various utilities for types, such as Map, a mapping from types.Type to interface{} values.
go/vcs
Package vcs exposes functions for resolving import paths and using version control systems, which can be used to implement behavior similar to the standard "go get" command.
Package vcs exposes functions for resolving import paths and using version control systems, which can be used to implement behavior similar to the standard "go get" command.
internal/fastwalk
Package fastwalk provides a faster version of filepath.Walk for file system scanning tools.
Package fastwalk provides a faster version of filepath.Walk for file system scanning tools.
internal/gopathwalk
Package gopathwalk is like filepath.Walk but specialized for finding Go packages, particularly in $GOPATH and $GOROOT.
Package gopathwalk is like filepath.Walk but specialized for finding Go packages, particularly in $GOPATH and $GOROOT.
internal/imports
Package imports implements a Go pretty-printer (like package "go/format") that also adds or removes import statements as necessary.
Package imports implements a Go pretty-printer (like package "go/format") that also adds or removes import statements as necessary.
internal/jsonrpc2
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
internal/lsp/browser
Package browser provides utilities for interacting with users' browsers.
Package browser provides utilities for interacting with users' browsers.
internal/lsp/cmd
Package cmd handles the gopls command line.
Package cmd handles the gopls command line.
internal/lsp/diff
Package diff implements the Myers diff algorithm.
Package diff implements the Myers diff algorithm.
internal/lsp/protocol
Package protocol contains the structs that map directly to the wire format of the "Language Server Protocol".
Package protocol contains the structs that map directly to the wire format of the "Language Server Protocol".
internal/lsp/snippet
Package snippet implements the specification for the LSP snippet format.
Package snippet implements the specification for the LSP snippet format.
internal/lsp/source
Package source provides core features for use by Go editors and tools.
Package source provides core features for use by Go editors and tools.
internal/module
Package module defines the module.Version type along with support code.
Package module defines the module.Version type along with support code.
internal/semver
Package semver implements comparison of semantic version strings.
Package semver implements comparison of semantic version strings.
internal/tool
Package tool is an opinionated harness for writing Go tools.
Package tool is an opinionated harness for writing Go tools.
internal/txtar
Package txtar implements a trivial text-based file archive format.
Package txtar implements a trivial text-based file archive format.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL