A downloadable debugger for Windows
RemedyBG is a 64-bit Windows debugger written from scratch with the goal of replacing the behemoth Visual Studio debugger and realizing that debuggers have largely been stagnant in their progress over the last couple of decades. All the code for the RemedyBG debugger engine is written from scratch (including PDB symbol file support).
Note that this project is in development and should be considered in "early access". This is why the version number is current less than 1.0. Just to be clear, there are certainly bugs as well as features that haven't been implemented yet.
Note that the software license is a perpetual license. There will be no need to repurchase as new versions are released.
Note that the source code is not provided as part of the distribution.
Note that if you create a project in Visual Studio, one of the default options is /debug:fastlink. This options scatters bits of debug information throughout the OBJ and LIB files rather than putting this information into the PDB file. RemedyBG does not support this flag and will fail to find any symbol information if this option is used.
Please use the message boards at https://remedybg.handmade.network/ or contact me via email (see README) for any comments, requests, and so forth.
RemedyBG is used on live streams of Casey Muratori's Handmade Hero which you can check out at https://handmadehero.org/.
New Features in 0.3.0.0
- Added support for parsing character literals, including multi-character literals such is 'IHDR'
in the watch window.
- Better Unicode support (filenames, command lines, string preview, and so forth)
- All non-session specific settings now live in a single file
- Combined processor breakpoints other breakpoint types (rather than having two separate tabs).
- Added conditional breakpoints for all breakpoint types.
- Implemented find in file (Ctrl+F) in text window. F3/Shift-F3 will repeat the search.
- Added "Open Last Session on Startup" option.
- A Dark/Light style picker was added to the Style menu.
- Added "Reset to Default" for font options.
- Session can now specify environment variables
- Added "Close All But This" to a text window tab's context menu.
- Can now use 'sizeof' in watch expression. Presently implements C99 standard: "sizeof(typename)"
and "sizeof expression". Parenthesis imply a typename lookup.
- Adds formatters for vector registers
- Adds formatters for inline watch window memory display of various sorts
- Hexadecimal override in watch window (right-click "Hexadecimal Display" to toggle).
Bug Fixes 0.3.0.1
- An address for a local/param can be relative to RSP,RBP,or R13 (specified in the PDB file). Previously, RSP was always used as the base when computing relative addresses. This has been fixed.
- Fixed problem displaying certain C++ structures in the watch window.
- Fixed handling of character literals in binary expressions (e.g., "i == 'a')
- Fixed problem loading RDBG session files saved by 0.3.0.0 that contained processor breakpoints.
Bug Fixes 0.3.0.2
- Corrected issues with __locals related to fixes made in 0.3.0.1
- Now properly handle padding for type records. This fixes a problem when watching forward declared structures/unions without a unique name.
New Features / Bug Fixes 0.3.0.3
- Fixed handling of failure to resume execution
- Exclude floating point types from watch window-wide hexadecimal display.
- Fixed issues with spaces when auto-populating command and arguments from command-line.
- Fixed Control>Break execution which was inadvertently stepping the RIP back an instruction.
- Improved error message in the case that structure field cannot be found.
- Added scrollbar size setting under Window>Style
- Added "Set Next Statement" to allow setting the current instruction pointer
- Fixed handling of parameters passed by reference in certain cases.
- Fixed dereferencing of synthetic pointer types.
- Improve speed of search for PDBs in executable's directory
- Fixed problems when attaching to a process
- Fixed display of registers in watch window when no symbols are available for the stack frame
- Fixed bug in register view which was always showing the last thread's context
New Features / Bug Fixes 0.3.0.4
- Fixed handling of breakpoints when reattaching to a process
- Added "Reattach to Process" (Ctrl+Shift+F6)
- Fixed potential hang in callstack with wide chararacter string previews
- Fix to allow binary operators on integral casted pointer types (e.g., "(u64)ptr & 15")
- Global variables with the same identifier in different translation units will now all display in the watch window.
- Fixed setting focus to text window when clicking on a breakpoint
- Conditional expressions now work for a wider range of types
Bug Fixes 0.3.0.5
- Text window now gracefully handles out of bound line numbers. Falls back to disassembly upon failure.
- Improved performance and robustness of disassembly.
- Fixed bug in target memory page cache.
- Fixed keyboard navigation direction in breakpoints window
- Improved contrast of active tab
Bug Fixes 0.3.0.6
- Fixed integral type in evaluation of bitwise-operators
- Large .text sections are no longer processed through the linear disassembler
- Fixed handling of zero-byte text files.
- No longer auto restore the last session if there are valid command-line arguments
- Fixed conversion from float to integral type in certain cases.
- Fixed formatting of signed characters (were treated as unsigned)
- An implicit 'this->' is now automatically added before an identifier for member access
- Added "Auto Clear" toggle to the Output window. This clears the output window at the start of any run.
- Fields of l-value references can now be accessed with the dot operator.
- Fixed bug reloading conditional breakpoints across multiple files.
- Fixed escaping of '%' character in watch window.
- Fix to read proper number of bytes for wchar_t string previews.
- Fixed field offset in structure using multiple inheritance.
- Added "Close" to text window tab context menu and removed 'x' button from individual tabs.
- Bitfields/enum now respect hexadecimal formatter
- Handle fast fail exception (int 0x29) used by C-runtime's assert
- Adds error message if dereferencing a non pointer value in evaluation.
- Fixed regression that removed display of Xmm/Ymm/Zmm registers
- Fixed color of watch window arrows and lock icons in light mode.
- Added "Goto Line" menu item in "Source File" menu
Bug Fixes 0.3.0.7
- Added Windows 10 dpiAwareness to embedded manifest
- Fixed a bug where a format specifier for number of array elements would error with "Expected integer value for format specifier" if the type had any modifiers (e.g., const)
- Clear disassembly cache when restarting a target. Fixes problem where diassembled instructions were not updating after modifying the binary.
- Allow expanding/collapsing both memory and string views in the watch window
- Added F1 / help menu entry for launching this README
- Now support sticky-key accessibility feature in RemedyBG
- Detach from target if it was attached to and RemedyBG terminates
- File|New now asks user if they want to stop debugging.
- Can now use Enter after keyboard navigation through tabs with the Alt to select tab
- Improved contrast of shortcut text in menus when highlighted
- The exit code is now shown in the status bar (green for success, red otherwise).
In order to download this debugger you must purchase it at or above the minimum price of $29.95 USD. You will get access to the following files: