Very Sleepy
Very Sleepy is a free C/C++ CPU profiler for Windows systems.
I originally started it as a simple fork of Nick Chapman's sleepy, because I had some features I wanted adding, but these days Very Sleepy is developed thanks to the efforts of dozens of people who work to contribute to it.
It supports any native Windows app, if it has standard PDB or DWARF debugging information. No recompilation is necessary – it can just attach to any app as it's running.
Both 32-bit x86 and 64-bit x64 systems are fully supported, and Very Sleepy will work with both Visual Studio or gcc/mingw compilers.
Profiling results are displayed in full call-graph format, and can additionally be saved and exported to CSV format.
Very Sleepy is released under the GNU Public License, so you're guaranteed the right to the source code and to change it how you wish.
For support, bug reports, and to help contribute, please visit our GitHub page.
Download
Latest
Version 0.91 – 8.19.2021
Installer
Combined Windows x86/64 installer.
Source code
.ZIP of the source tree.
GitHub page
Access to development versions and bug reports.
Changes
- Rename project back to Very Sleepy (this fork repository (on github), is now the official repository)
- Use Dr. MinGW to resolve MinGW symbols by default
- Update Wine DbgHelp for Windows
- Improve and greatly simplify 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 /a to profile an existing process by its process ID (#30)
- Contributed by Markus Gaisbauer:
- Added "Total CPU time" column (#37)
- Improved handling of processes with many threads (#38)
- Contributed by Bernhard Schelling:
- Added Callgrind format file export feature (#46)
- Fixed symbols (PDB files) not being unloaded after detaching (#57)
- Improved jumping to source lines from list views (#58)
- Contributed by rammerchoi:
- Added command-line switch '/mt' and '/mbt' (#48)
- Contributed by Graeme Kelly:
- Added display of thread names on threads lists (#60)
- Added column headers to exported CSV files (#62)
- Contributed by Yujiang Wang:
- Fixed missing buttons for very long paths (#65)
- Updated DbgHelp to 10.0.17763.1 (#65)
- Contributed by djdron:
- Improved HDPI support (#74)
- Fixed some memory leaks (#75)
- Updated Dr.MinGW (#77)
Release History
-
0.91 • installer • source • 8.19.2021
- Rename project back to Very Sleepy (this fork repository [on github] is now the official repository)
- Use Dr. MinGW to resolve MinGW symbols by default
- Update Wine DbgHelp for Windows
- Improve and greatly simplify 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 /a to profile an existing process by its process ID (#30)
- Contributed by Markus Gaisbauer:
- Added "Total CPU time" column (#37)
- Improved handling of processes with many threads (#38)
- Contributed by Bernhard Schelling:
- Added Callgrind format file export feature (#46)
- Fixed symbols (PDB files) not being unloaded after detaching (#57)
- Improved jumping to source lines from list views (#58)
- Contributed by rammerchoi:
- Added command-line switch '/mt' and '/mbt' (#48)
- Contributed by Graeme Kelly:
- Added display of thread names on threads lists (#60)
- Added column headers to exported CSV files (#62)
- Contributed by Yujiang Wang:
- Fixed missing buttons for very long paths (#65)
- Updated DbgHelp to 10.0.17763.1 (#65)
- Contributed by djdron:
- Improved HDPI support (#74)
- Fixed some memory leaks (#75)
- Updated Dr.MinGW (#77)
-
0.90-CS • installer • source • 12.23.2014
- Merged fork back into the mainline.
- Redesign parts of the file format and internal database representation, to allow more exact late symbol loading, as well as a disassembler view in the future
- 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.dll hijacking
- Fix handling of symbols containing whitespace characters
- More user interface improvements
- Contributed by Michael Vance:
- Add CSV export for the callstack view
- UI fixes and code cleanup
- 0.83-CS • installer • source • 8.22.2013
- 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 32-bit version alongside 64-bit version
- Contributed by Richard Munn:
- Added a time limit option to the interface
- Added function highlighting and filtering
- 0.82 • installer • source • 1.4.2012
- Bugfix release – fixed crash with long symbol names causing a buffer overflow.
- 0.81 • installer • source • 11.21.2011
- Bugfix release – fixed crash on systems with non-English localisation.
- Added a crash reporter.
- 0.8 • installer • source • 11.15.2011
- Support for GCC/mingw. You can now profile executables with embedded DWARF2 data and it should work. No special options are required for this, just compile with "-g" to make sure you have symbols present. You may also wish to use "-fno-omit-frame-pointer" to ensure correct callstacks, although Sleepy will generally work either way. You don't need to use "-pg" or any rubbish. It can even walk correct stacks between a Microsoft DLL into a GCC one, which was harder than you'd think.
- Symbol server support. Just click the 'download' button and it will automatically fetch any symbols from the configured symbol server (by default, Microsoft's public server). You can select a different one from the options dialog.
- Unicode support, so you can now have unicode snowmen in your filenames.
- Pause and resume while capturing.
- Output from the DBGHELP library is now captured and displayed in a log window, to aid tracking down mysterious PDB errors.
- Sleepy will now automatically search in the same directory as the EXE when looking for PDB files, as well as in the configured symbol cache.
- Speed throttle, in case you wish to capture over a very long time with a lower profiler overhead.
- Fixed bug where it would not load on Windows 2000.
- Launching executables from inside Sleepy now has a higher chance of actually working.
- You can restrict the tree to start from a given subset, for example, if you're only profiling one part of your program and want to throw out all the unrelated stuff. Just right-click on the symbol.
- Fixed a bug where the window settings could get screwed up sometimes.
- 0.7 • installer • source• 10.13.2010
- 64-bit support (hooray!). ×64 only, no Itanium.
- A new view for showing whole callstacks at once.
- Automatic collapsing of internal Windows kernel functions.
- More accurate time measurement when sampling deep callstacks.
- Profiling statistics (filename, date, duration, etc) are written into the .sleepy file.
- Syntax highlighting for the source view.
- Automatically find Microsoft CRT source paths.
- Added PID display to the process selector.
- Export data to a CSV file.
- Ability to select the working directory when launching an EXE.
- 0.6 • installer • source • 8.8.2009
- Stops correctly upon process/thread termination.
- Added ability to launch an EXE, both from the GUI and the command line.
- Thread picker list now shows the function each thread is executing.
- Fixed module sorting (thanks to aras-p).
- Debug privilege patch (again thanks to aras-p).
- New capture progress window.
- Fixed bug where red margin counts would often not add up to 100%.
- Fixed callees count for some recursive functions.
- Upgraded to latest DBGHELP.DLL.
- Fixed SuspendThread problem when debugger is attached.
- Added helpful hint for system calls.
- Unknown functions now get the address shown.
- Delete temporary capture files on exit.
- Fixed bug where high CPU load would kill profile sampling rate.
- Many threading improvements.
- Rewrote CallStack class to not allocate memory all over the place.
- 0.5 • installer • source • 3.25.2009
- multi-thread support
- 0.4 • installer • source• 4.10.2008
- you can sort columns (hooray!)
- better handling of recursive functions
- remembers window position, and other small tweaks
- (you'll need to uninstall any old versions first, sorry)
- 0.3 • installer • source • 26.1.2008
- doesn't throw an error if the process stops early
- better installer (installs correct CRT, I hope)
- 0.2 • installer • source • 26.7.2007
- revamped UI
- call-graph profiling
- load-save
Written by Richard Mitton,
software engineer and travelling wizard.
Follow me on twitter: http://twitter.com/grumpygiant