Very Sleepy is a sampling CPU profiler for Windows with a wxWidgets-based GUI. This repository is an actively developed fork of the Very Sleepy project.
- Profile an existing process, selected threads, or a program launched from Very Sleepy
- Resolve Microsoft PDB symbols through DbgHelp and the Microsoft Symbol Server
- Resolve MinGW DWARF symbols with the bundled, current Dr. MinGW/MgwHelp fork, including substantially improved symbol and line information
- Export profiles as CSV, Callgrind, speedscope JSON, or folded stacks for flame graph viewers such as flameshow and flamelens
- Choose a light, dark, or system appearance; the modern palettes also apply to source and call-stack views
- Reopen captures quickly from the recent-files history and keep customized window and list layouts
- Filter samples by thread, inspect callers and callees, and jump from profiling results to source lines
- Use Very Sleepy from the command line, including captures launched from a console
The upstream project wiki documents the inherited user interface and features, including command-line operation, profiling MinGW programs, and late symbol resolution. Fork-specific changes are summarized below and in the release notes.
Installers are available from this fork's GitHub releases. The Windows build workflow also produces an installer artifact for current development builds.
- Updated the bundled Dr. MinGW, MgwHelp, and dwarfstack code, adding much better DWARF symbol and line handling
- Reworked symbol loading to use one helper instance per target process and improved coexistence with the Microsoft DbgHelp runtime
- Reduced GUI list rebuilding and adopted VS Code's Modern light and dark palette colors
- Improved symbol diagnostics, call-stack comparisons, and runtime packaging
- Published the first numbered releases of this fork, with reproducible CMake/NSIS packaging and automatic GitHub releases
- Added speedscope JSON and folded-stack exports for standalone flame graph viewers
- Added and refined recent-file history, persistent list columns, and dockable profiler layouts
- Fixed x64 call stacks and made symbol loading, module detection, and target suspension more reliable
- Added a dedicated console build so output from programs launched by the profiler can be redirected
- Improved profiling and GUI performance by caching symbol lookups and avoiding unnecessary list reconstruction
See the v92 through v100 releases for the detailed changes in each release.
- Started this fork from upstream commit
dcec532 - Replaced the legacy build with CMake and added GCC/MSYS2 support
- Updated the application for wxWidgets 3.3 and modernized its wxWidgets and C++ usage
- Added recent profile history and selectable light, dark, and system themes
- Added the original speedscope exporter and numerous process-, thread-, and call-stack-view performance improvements
- Simplified the codebase and made the maintained build 64-bit only
- Do not include time while paused in sample durations
- Add command-line switch
/dto wait before starting profiler - Contributed by aaalexandrov:
- Rename project back to Very Sleepy (that fork repository became the official upstream repository)
- Use Dr. MinGW to resolve MinGW symbols by default
- Update Wine DbgHelp for Windows
- Improve and greatly simplify the build process (#40)
- Add continuous integration via AppVeyor
- Improve Visual Studio 2015 support (#28)
- More user interface fixes and improvements
- Contributed by Bernat Muñoz Garcia:
- Use Scintilla for syntax highlighting (#16)
- Contributed by Ashod:
- 64-bit fixes (#21)
- Contributed by k4hvd1:
- Added command-line option
/ato profile an existing process by its process ID (#30)
- Added command-line option
- Contributed by Markus Gaisbauer:
- Contributed by Bernhard Schelling:
- Contributed by rammerchoi:
- Added command-line switches
/mtand/mbt(#48)
- Added command-line switches
- Contributed by Graeme Kelly:
- Contributed by Yujiang Wang:
- Contributed by djdron:
- Redesign parts of the file format and internal database representation to allow more exact late symbol loading and a future disassembler view
- Add an "Address" column to all function lists
- For the call-stack and callers view, the address specifies the address past the call instruction
- Several fixes to the crash reporter
- Use wxWidgets 2.9.5
- Fix problems caused by
dbghelp.dllhijacking - Fix handling of symbols containing whitespace characters
- More user interface improvements
- Contributed by Unknown W. Brackets:
- 64-bit fixes (#6)
- Contributed by Michael Vance:
- Add CSV export for the call-stack view
- UI fixes and code cleanup
- Rename fork to "Very Sleepy CS"
- Numerous user interface performance, responsiveness, and usability improvements
- Allow specifying additional symbol search paths
- Add Back and Forward menu items and hotkeys for function-list navigation
- Improve overall performance
- Add late symbol loading by saving a minidump during profiling
- Install the 32-bit version alongside the 64-bit version
- Contributed by Richard Munn:
First upstream fork release (2013-01-11)
- GitHub repository created
- Fix several issues with the
/rcommand-line option - Various UI improvements
- Do not completely abort after one failed
GetThreadContextcall
Changes before the repository's creation are available in its Git history.
Third-party dependencies are Git submodules. Clone with --recursive, or initialize them after cloning:
git submodule update --init --recursiveConfigure the gcc64 preset in an MSYS2 UCRT64 shell and build the package target:
cmake --preset gcc64
cmake --build --preset gcc64 --config Release --target packageThe NSIS installer is written to build-gcc64/packages/.
Bug reports and feature requests are welcome in this fork's issue tracker. Please submit code changes as pull requests.
