Skip to content
 
 

Repository files navigation

Very Sleepy

Windows build

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.

Very Sleepy using the dark theme

Features

  • 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

Documentation

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.

Download

Installers are available from this fork's GitHub releases. The Windows build workflow also produces an installer artifact for current development builds.

History

This fork

Current development (after v100)

  • 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

v92–v100 (2026)

  • 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.

2023–2025

  • 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

Inherited upstream history

Version 0.92 (unfinished upstream development)

  • Do not include time while paused in sample durations
  • Add command-line switch /d to wait before starting profiler
  • Contributed by aaalexandrov:
    • Add sample filtering by thread (#86)
    • Profile new threads as they are created (#88)

Version 0.91 (2021-08-19)

  • 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 /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 export (#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 switches /mt and /mbt (#48)
  • Contributed by Graeme Kelly:
    • Added display of thread names in thread 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 HiDPI support (#74)
    • Fixed some memory leaks (#75)
    • Updated Dr. MinGW (#77)

Version 0.90 (2014-12-23)

  • 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.dll hijacking
  • 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

Version 0.83 (2013-08-22)

  • 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:
    • Added a time-limit option to the interface (#1)
    • Added function highlighting and filtering (#2)
    • Interface improvements (#3)
  • GitHub repository created
  • Fix several issues with the /r command-line option
  • Various UI improvements
  • Do not completely abort after one failed GetThreadContext call

Changes before the repository's creation are available in its Git history.

Building

Prerequisites

  • CMake 3.21 or newer
  • MSYS2 UCRT64 with Ninja, GCC, wxWidgets 3.3, and NSIS

Third-party dependencies are Git submodules. Clone with --recursive, or initialize them after cloning:

git submodule update --init --recursive

Configure the gcc64 preset in an MSYS2 UCRT64 shell and build the package target:

cmake --preset gcc64
cmake --build --preset gcc64 --config Release --target package

The NSIS installer is written to build-gcc64/packages/.

Contributing

Bug reports and feature requests are welcome in this fork's issue tracker. Please submit code changes as pull requests.

About

Very Sleepy, a sampling CPU profiler for Windows

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages