valgrind

Valgrind profiler skill for memory error detection and cache profiling. Use when running Memcheck to find heap corruption, use-after-free, memory leaks, or uninitialised reads; or Cachegrind/Callgrind for cache simulation and function-level profiling. Activates on queries about valgrind, memcheck, h

By mohitmishra786 · 477 installs

npx skills add mohitmishra786/low-level-dev-skills --skill valgrind

Source repository · Upstream listing

Valgrind Purpose Guide agents through Valgrind tools: Memcheck for memory errors, Cachegrind for cache simulation, Callgrind for call graphs, and Massif for heap profiling. Triggers "My program has a memory leak / use after free" "I can't use ASan — can I use Valgrind instead?" "How do I profile cache behaviour without perf?" "How do I visualize call graphs with Callgrind?" "How do I profile heap allocation patterns?" "Valgrind reports errors in third party code I can't fix" Workflow 1. Memcheck — memory error detection Compile with g O1 for best results. O0 is also fine; avoid O2 + which can produce false positives. Key flags: Flag Default Effect leak check=full summary Full leak details show leak kinds=all definite Show all leak kinds track origins=yes no Show where uninit values came from (slow) error exitcode=N 0 Exit N if errors found (CI integration) log file=file stderr Save report to file suppressions=file none Suppress known FPs gen suppressions=yes no Print suppression directives for errors max stackframe=N 2000000 Increase for deep stacks malloc fill=0xAB off Fill allocated memory (detect uninit use) free fill=0xCD off Fill freed memory (detect use after free) 2. Understanding Memcheck output Invalid read/write : out of bounds access; check array bounds Use of uninitialised value : read before write; use track origins=yes Invalid free / double free : mismatched malloc/free; check ownership Definitely lost : reachable via no pointers; clear leak Indirectly lost : lost through a chain; usually means one root leak Possibly lost : might be pointing into the middle of a block; often FP with custom allocators 3. Leak kinds Kind Meaning Definitely lost No pointer to block Indirectly lost Lost via another lost block Possibly lost Pointer into middle of block Still reachable Pointer exists at exit; not a leak but never freed For library code: show leak kinds=definite,indirect reduces noise from still reachable. 4. Suppressions 5. Cachegrind — cache simulation Key metrics: I1mr / ILmr : L1/LL instruction cache miss rate D1mr / DLmr : L1/LL data read miss rate D1mw / DLmw : L1/LL data write miss rate 6. Callgrind — call graph profiling Callgrind is slower than perf but works without root and provides exact call counts. 7. Massif — heap profiling Massif shows heap usage over time; useful for finding peak allocation sites and tracking gradual leaks. 8. Performance considerations Valgrind Memcheck runs ~10 50x slower than native. Mitigations: Use a shorter representative workload Use error exitcode=1 to fail fast in CI Use ASan ( fsanitize=address ) for faster memory checking during development Reserve Valgrind for cases where ASan can't be used (old toolchains, production like environments) For a comparison of Valgrind vs ASan, see [references/valgrind vs asan.md](references/valgrind vs asan.md). Related skills Use skills/runtimes/sanitizers for faster ASan/UBSan alternatives Use skills/profilers/linux perf for CPU level profiling (faster than Cachegrind) Use skills/profilers/flamegraphs to visualise Callgrind output