--- name: debug-with-valgrind description: Debug crashes, segfaults, and memory errors using valgrind integration with nextest through pre-configured profiles --- # Debugging with Valgrind + Nextest When you encounter crashes, segfaults, or memory errors in tests, use valgrind for proper debugging. ## Quick Usage ```bash # Run a specific test under valgrind cargo nextest run --profile valgrind -p PACKAGE --test TEST_FILE TEST_NAME # Example cargo nextest run --profile valgrind -p facet-format-json --test jit_deserialize test_jit_option_some ``` ## How It Works The project has valgrind pre-configured in `.config/nextest.toml`: 1. **Wrapper script**: Defined as `[scripts.wrapper.valgrind]` - Command: `valgrind --leak-check=full --show-leak-kinds=all ...` - Automatically wraps test execution 2. **Profile**: `[profile.valgrind]` applies the wrapper to all tests on Linux 3. **Running**: Use `--profile valgrind` flag with nextest ## Benefits - ✅ **Automatic setup** - no manual valgrind commands needed - ✅ **Proper configuration** - leak checking, error codes pre-configured - ✅ **Integrated** - works with nextest filtering and test selection - ✅ **Clean output** - nextest captures and formats valgrind output ## Don't Do This ❌ Running valgrind manually: `valgrind ./target/debug/deps/test-binary` ❌ Using raw `--no-run` + valgrind commands ❌ Playing hunt-the-segfault without proper tools ## Do This Instead ✅ Use the pre-configured profile: `cargo nextest run --profile valgrind ` ✅ Let nextest handle the wrapper script integration ✅ Get clean, actionable valgrind output immediately ## Debugging Workflow 1. Test crashes with SIGSEGV 2. Run: `cargo nextest run --profile valgrind -p PACKAGE --test FILE TEST_NAME` 3. Valgrind shows exact line where invalid read/write occurs 4. Fix the bug 5. Verify with regular tests ## See Also - Nextest wrapper scripts docs: https://nexte.st/docs/configuration/wrapper-scripts/ - Project nextest config: `.config/nextest.toml`