Skip to content

Very Sleepy

Very Sleepy is a free C/C++ CPU profiler for Windows systems.

Originally started as a fork of Nick Chapman’s sleepy, many people have since contributed to add considerable improvements.

It supports any native Windows app, if it has standard PDB or DWARF2 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.90-CS – 12.23.2014

Installer
Combined Windows x86/64 installer.

Source code
.ZIP of the source tree.

GitHub page
Access to development versions and bug reports.

Changes:

This release is only possible due to the tireless efforts of Vladimir Panteleev, resulting in the merge of the Very Sleepy CS 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

 

Screenshots

Attaching to a process.

Attaching to a process.

Browsing the captured data

Browsing the captured data

Release History

  • 0.90-CSinstallersource12.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-CSinstallersource8.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.82installersource1.4.2012
    • Bugfix release – fixed crash with long symbol names causing a buffer overflow.
  • 0.81installersource11.21.2011
    • Bugfix release – fixed crash on systems with non-English localisation.
    • Added a crash reporter.
  • 0.8installersource11.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.7installersource10.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.6installersource8.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.5installer source3.25.2009
    • multi-thread support
  • 0.4installersource4.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.3installersource26.1.2008
    • doesn’t throw an error if the process stops early
    • better installer (installs correct CRT, I hope)
  • 0.2 installersource26.7.2007
    • revamped UI
    • call-graph profiling
    • load-save