mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-05 10:42:13 +02:00
Merge bitcoin/bitcoin#32113: fuzz: enable running fuzz test cases in Debug mode
3669ecd4ccdoc: Document fuzz build options (Anthony Towns)c1d01f59acfuzz: enable running fuzz test cases in Debug mode (Anthony Towns) Pull request description: When building with BUILD_FOR_FUZZING=OFF BUILD_FUZZ_BINARY=ON CMAKE_BUILD_TYPE=Debug allow the fuzz binary to execute given test cases (without actual fuzzing) to make it easier to reproduce fuzz test failures in a more normal debug build. In Debug builds, deterministic fuzz behaviour is controlled via a runtime variable, which is normally false, but set to true automatically in the fuzz binary, unless the FUZZ_NONDETERMINISM environment variable is set. ACKs for top commit: maflcko: re-ACK3669ecd4cc🏉 marcofleon: re ACK3669ecd4ccryanofsky: Code review ACK3669ecd4ccwith just variable renamed and documentation added since last review Tree-SHA512: 5da5736462f98437d0aa1bd01aeacb9d46a9cc446a748080291067f7a27854c89f560f3a6481b760b9a0ea15a8d3ad90cd329ee2a008e5e347a101ed2516449e
This commit is contained in:
@@ -150,6 +150,37 @@ If you find coverage increasing inputs when fuzzing you are highly encouraged to
|
||||
|
||||
Every single pull request submitted against the Bitcoin Core repo is automatically tested against all inputs in the [`bitcoin-core/qa-assets`](https://github.com/bitcoin-core/qa-assets) repo. Contributing new coverage increasing inputs is an easy way to help make Bitcoin Core more robust.
|
||||
|
||||
## Building and debugging fuzz tests
|
||||
|
||||
There are 3 ways fuzz tests can be built:
|
||||
|
||||
1. With `-DBUILD_FOR_FUZZING=ON` which forces on fuzz determinism (skipping
|
||||
proof of work checks, disabling random number seeding, disabling clock time)
|
||||
and causes `Assume()` checks to abort on failure.
|
||||
|
||||
This is the normal way to run fuzz tests and generate new inputs. Because
|
||||
determinism is hardcoded on in this build, only the fuzz binary can be built
|
||||
and all other binaries are disabled.
|
||||
|
||||
2. With `-DBUILD_FUZZ_BINARY=ON -DCMAKE_BUILD_TYPE=Debug` which causes
|
||||
`Assume()` checks to abort on failure, and enables fuzz determinism, but
|
||||
makes it optional.
|
||||
|
||||
Determinism is turned on in the fuzz binary by default, but can be turned off
|
||||
by setting the `FUZZ_NONDETERMINISM` environment variable to any value, which
|
||||
may be useful for running fuzz tests with code that deterministic execution
|
||||
would otherwise skip.
|
||||
|
||||
Since `BUILD_FUZZ_BINARY`, unlike `BUILD_FOR_FUZZING`, does not hardcode on
|
||||
determinism, this allows non-fuzz binaries to coexist in the same build,
|
||||
making it possible to reproduce fuzz test failures in a normal build.
|
||||
|
||||
3. With `-DBUILD_FUZZ_BINARY=ON -DCMAKE_BUILD_TYPE=Release`. In this build, the
|
||||
fuzz binary will build but refuse to run, because in release builds
|
||||
determinism is forced off and `Assume()` checks do not abort, so running the
|
||||
tests would not be useful. This build is only useful for ensuring fuzz tests
|
||||
compile and link.
|
||||
|
||||
## macOS hints for libFuzzer
|
||||
|
||||
The default Clang/LLVM version supplied by Apple on macOS does not include
|
||||
|
||||
Reference in New Issue
Block a user