valgrind
Valgrind skill for the ikigai project
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Valgrind
Description
Interpreting Valgrind memcheck output for memory debugging.
Running Valgrind
# Via Makefile
make check-valgrind
# Direct invocation
valgrind --leak-check=full --track-origins=yes ./ikigai
Error Types
Invalid Read/Write
==12345== Invalid read of size 4
==12345== at 0x... function_name (file.c:42)
==12345== Address 0x... is 0 bytes after a block of size 100 alloc'd
Meaning: Reading/writing past buffer bounds or freed memory. Fix: Check array indices, buffer sizes, use-after-free.
Use of Uninitialized Value
==12345== Conditional jump or move depends on uninitialised value(s)
==12345== at 0x... function_name (file.c:42)
==12345== Uninitialised value was created by a heap allocation
==12345== at 0x... malloc (...)
Meaning: Using memory before setting it.
Fix: Initialize variables, use memset, check all code paths.
Invalid Free
==12345== Invalid free() / delete / delete[]
==12345== at 0x... free (...)
==12345== Address 0x... is 0 bytes inside a block of size 100 free'd
Meaning: Double-free or freeing invalid pointer. Fix: Track ownership, use talloc's hierarchical free.
Memory Leaks
==12345== LEAK SUMMARY:
==12345== definitely lost: 100 bytes in 1 blocks
==12345== indirectly lost: 200 bytes in 2 blocks
==12345== possibly lost: 0 bytes in 0 blocks
==12345== still reachable: 500 bytes in 5 blocks
- definitely lost - Memory with no pointer to it (real leak)
- indirectly lost - Memory reachable only through definitely lost
- possibly lost - Interior pointer exists (may be intentional)
- still reachable - Memory still accessible at exit (often acceptable)
Common Options
--leak-check=full # Detailed leak info
--track-origins=yes # Where uninitialized values came from
--show-reachable=yes # Show still-reachable blocks
--suppressions=file.supp # Ignore known issues
--gen-suppressions=all # Generate suppression entries
Reading Stack Traces
==12345== Invalid read of size 4
==12345== at 0x401234: parse_json (parser.c:142)
==12345== by 0x401567: load_config (config.c:89)
==12345== by 0x401890: main (main.c:23)
Read bottom-up: main called load_config called parse_json where error occurred.
Helgrind (Thread Debugging)
valgrind --tool=helgrind ./ikigai
Detects:
- Data races
- Lock order violations
- Misuse of POSIX threading API
References
- Valgrind manual: https://valgrind.org/docs/manual/
- See
gdbserver.mdfor live debugging - See
coredump.mdfor crash analysis
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!