raddebugger

A native, user-mode, multi-process, graphical debugger.

MIT License

Stars
2.9K

Bot releases are hidden (Show)

raddebugger - The RAD Debugger v0.9.10-alpha Latest Release

Published by ryanfleury 5 months ago

This is a fairly major release consisting of many large passes over many parts of the codebase. This simultaneously means you might notice some cool new things, and you might notice some accidental regressions or bugs! If you notice a new issue, please don't hesitate to post about it, so it can be quickly addressed.

Here is a list of the most major upgrades or changes:

Features & Improvements

  • The Disassembly view now supports disassembly intermixed with source code, if debug info and source code is present.
  • Major upgrades to panel organization UI. Dragging and dropping tabs can now also be used to split panels and move tabs in a single operation (similar to other standard panel organization UIs), making the most common panel rearrangement operations a breeze.
  • Watch and Watch-like views now support multi-row selection and multi-cursor editing.
  • Watch views now support reordering.
  • Major upgrades to the autocompletion lister UI. Can now be used to autocomplete multiple times in a single expression, without autocompletion actions causing editing to stop. The autocompletion lister is also now more aware of the context in which you type; if specifying view rules, it will show a list of possible view rules. If specifying parameter names to a view rule, it will show a list of possible parameter names. If specifying a parameter, it will show possible useful autocompletions for whatever that parameter requires (e.g. an arch parameter will show autocompletions for architectures; a fmt parameter for a bitmap view rule will show autocompletions for 2D texture formats, and so on).
  • When editing rows in a Watch view, the expression will now update immediately as you type.
  • The frontend now provides its own custom window border, leaving more of the window available for debugging controls.
  • The bitmap view rule can now be popped out into a standalone tab, which offers a more full bitmap viewing UI. This is currently incomplete, but already offers better inspection controls for bitmaps, with a zoomable canvas view. This same pattern will be used in the future for other more sophisticated view rules.
  • The debugger now lexes (syntax highlights, supports eval-on-hover, and so on) Jai and Zig files.
  • The debugger now outputs logs of every run to %appdata%/raddbg/logs, which can help provide extra information in case of issues.
  • The source view now displays the margin and line numbers as floating and always visible, when horizontally scrolled.

Fixes

  • The debugger now more correctly supports updated debug info for hot-reloaded executables and DLLs.
  • The debugger now displays HRESULT numerical codes. (#202)
  • The debugger now properly sanitizes (escapes, trims whitespace) strings for serialization and deserialization. This fixes issues with backslashes and leading or trailing spaces in various user-entered strings, like those in a target's information. (#197, #207)
  • The debugger now better responds to scrolling on trackpads. (#178)
  • Many issues with IPC commands have been fixed. Many broken cases have been fixed, and they now execute immediately and do not require interaction with the UI. (#157)
  • Unwinding and snapping to threads in JIT'd code has been fixed.
  • A number of crash fixes, and otherwise stability improvements.
raddebugger - The RAD Debugger v0.9.9-alpha

Published by ryanfleury 7 months ago

This release consists of a lot of behind-the-scenes work, primarily focused on improving the PDB -> RADDBGI conversion speed for larger projects, and cleaning up and simplifying many lower level debugger systems, to have a more solid foundation for further features and improvements moving forward.

Before this release, the PDB -> RADDBGI conversion process was completely single-threaded, and was not usable for large PDBs, and especially not in projects with several large PDBs. There are still plenty of performance improvements on the table, and we expect this to continue to improve, but this release already includes some major improvements. With our 8GB test PDB (the largest that we currently have), on a 64-core development workstation, conversion time decreased from ~11 minutes to ~30 seconds with the changes in this release. This should massively improve the debugger's usability in many cases where it was previously not usable.

As a result of the above progress, as well as all of the aforementioned work on the lower level debugger systems, a lot of code was either majorly changed or rewritten. If you experience new issues with this release that you didn't experience with older versions, it'd help out a lot if you let us know by submitting an issue.

EDIT: The new PDB -> RADDBGI converter had introduced some regressions, mostly related to C++ feature support. I've since fixed these. Since these are small fixes, but quite important for regular debugger usage for many people, I wanted to package up a new build with these fixes included. That being said, I didn't think these fixes alone justified an entirely new release with a new version number. So I've uploaded an updated build under raddbg.zip. The original build has been renamed to raddbg_0.9.9a.zip.

A more comprehensive list of the major improvements and fixes follows:

Features & Improvements

  • Major pass over the PDB -> RADDBGI converter to improve memory usage and performance, particularly with very large PDBs. (#145)
  • The Disassembly view now works for dynamically allocated and generated code, and correctly hot-reloads as the underlying memory changes. (#106)
  • The debugger now supports evaluating and visualizing bitfields. (#54)
  • The source and disassembly views now support double-click to select by token, and triple-click to select by line. (#81, #45).
  • The Disassembly view now correctly supports keyboard navigation, copy/paste, and the toggle-watch-expression-at-cursor command.
  • Syntax highlighting and basic hover-evaluation support for the Odin language.
  • Middle click now closes tabs. (#88)
  • More visible & more informative exception visualization.
  • Support for address and code byte toggling in Disassembly views.

Fixes

  • Fixed a crash when changes in a Watch view were committed when the selected row was not visible. (#133, #174, #176)
  • Fixed several process control and caching issues in the debugger's backend, eliminating several evaluation and usability issues.
  • Fixed a crash when viewing more complex Unicode strings in Watch views. (#165)
  • Fixed crashes in the evaluation expression parser, relating to incomplete/malformed expressions. (#155)
  • Fixed some issues with PDB line info parsing, which caused line info to "disappear" midway through a function. (#138)
  • Fixed the debugger's incorrect interpretation of UTF-16 and UTF-32 strings as UTF-8, causing incorrect visualization. (#180)
  • Fixed the debugger backend hanging when encountering uncaught exceptions, when those exceptions were specified to be filtered on first-chance encounters. (#151)
  • Fixed parsing of C++ digit separators. (#173)
  • Fixed the debugger being unable to correctly locate debug info because of differences in case-sensitivity in various usages of a path.
  • Fixed the frontend's input event consumption to be more correct and robust. (#91)
raddebugger - The RAD Debugger v0.9.8-alpha

Published by ryanfleury 8 months ago

This release includes the following improvements and fixes:

  • New fuzzy-filtered, debug-info-driven procedure name list interface, used for the Go To Name and Function Breakpoint commands.
  • New Types, Procedures, Globals, and Thread Locals views. These are automatically-filled Watch-style views that display all known types, procedures, globals, and thread-locals (respectively) in the selected module's (determined via the selected thread) debug information. These support fuzzy filtering, to filter down their generally large contents. Fuzzy filtering can be applied by typing in any of these views, or by explicitly running the "Filter" command.
  • Extended type evaluation support in Watch and Watch-style views.
  • Cache line and padding visualization in Watch and Watch-style views.
  • Fuzzy filtering support for Watch, Locals, Registers, Breakpoints, Watch Pins, Targets, Scheduler, Modules, and Exception Filters views. The fuzzy filtering may be applied identically to the aforementioned Types/Procedures/etc. views.
  • Support for "macros" in the Watch view. These allow the assignment of expressions to a label. Given the syntax x = expr, in all other Watch rows, the when x occurs in the expression, its evaluation will be equivalent to that of expr. x must always be some identifier (that does not collide with any local variables, global variables, or types), and expr can be any valid expression.
  • Direct visualization of failed memory reads in Watch and Watch-like views.
  • Better support for line information and stepping in programs generated with the /JMC MSVC option. (#36)
  • Fixed a number of cases in which the debugger UI was updating repeatedly when unnecessary. (#125)
  • Fixed the debugger's interpretation of thread naming events that were sent to name threads other than the thread which generated the event. (#127)
  • Fixed the debugger's usage of thread naming events when the debugger had not yet been fully notified of the associated thread's creation. This is mostly associated with the creation via CreateThread and subsequent naming of threads with the CREATE_SUSPENDED flag. (#127)
  • Improved the debugger's strategy for locating target entry points in various circumstances, including with executables that were not linked with the C runtime, and those that specify a custom entry point. (#61, #120)
  • Many other small tweaks, fixes, and improvements.
raddebugger - The RAD Debugger v0.9.7-alpha

Published by ryanfleury 9 months ago

This release includes the following improvements and fixes:

  • Further extended support for implicit namespace resolution in the evaluation system. (#55)
  • Support for C++ scope resolution operators in hover evaluation paths. (#55)
  • Extended the run-to-line command to work irrespective of whether or not a target is running. (#113)
  • Fixed mistreatment of AltGr inputs, causing spurious and incorrect menu bar focusing. (#59)
  • Implemented watch window change visualization, displaying when values in the watch window change after debuggee processes run. (#39)
  • Improved defaults for multi-target debugging; should prevent many cases when multiple targets are accidentally run, when only one was intended.
  • Many bugfixes relating to newer PDB symbols. This should fix some incorrect values or missing struct/class members. (#114)
  • The debugger now displays the full contents of a truncated string as a tooltip, if the mouse hovers the truncated string for a short time.
  • Fixed double-quoted strings in user-specified strings, including those attached to targets, breakpoints, or watch pins.
  • Fixed incorrect splitting of double-quoted target arguments. (#122)
  • Fixed synchronization bugs with Output log. This fixes some flickering and crashing with OutputDebugString-heavy programs. (#123)
  • Eliminated more overdraw and unnecessary work in the debugger's UI building and rendering code. This should further improve the frontend's performance on e.g. integrated GPUs.
raddebugger - The RAD Debugger v0.9.6-alpha

Published by ryanfleury 9 months ago

This release includes the following improvements and fixes:

  • Fixed member access operations on references. (#83)
  • Fixed member access, and other, operations on modified (e.g. const) pointer and reference types. (#83)
  • Fixed crash in memory view, when going to an out-of-bounds address. (#79)
  • Type expression evaluation, where the watch window evaluates types as well as values. The visualized type information is mostly empty at this point, but this allows viewing a type's members without needing to produce an artificial pointer to that type's instance (e.g. by watching (MyStruct *)0). This will be extended in the future.
  • Fixed broken OutputDebugString output. (#96)
  • A new, rewritten "command query" system. This improves & simplifies the debugger's interfaces (and implementations) for the command palette/lister, file picking dialogues, and attaching dialogues.
  • Warning if a 32-bit application is attempted to be launched, as that is currently an unsupported case.
  • An application icon, so that the debugger may be more easily identified on the task bar.
  • Many improvements to rendering performance, to reduce overdraw and simplify shader work. This greatly improves the UI's performance on older or lower power graphics cards (e.g. integrated GPUs).
  • Fixed memory view updating when memory is changed via edits in the watch window. (#92)
  • Fixed callstacks and disassembly when stepping through dynamically generated (e.g. JIT-compiled) code. (#106) The debugger is still not fully equipped to handle dynamic JIT-compiled code in that the disassembly view doesn't hot-reload decoded disassembly instructions when the underlying code memory is changed, but this will be addressed in a subsequent release.
  • Improved folder selection interface, to omit files and actually provide a path to select a directory which has been navigated to. (#85)
  • Support for hitting Space to expand watch window trees, as well as Enter.
  • Fixed bug, where debugger would launch & attach to multiple instances of the same program when running step-into or step-over commands, if waiting for an initial process to start. (#100)
  • Improved rules for selecting file replacements/overrides. The debugger will now try to override matching directories to whatever file was overridden, if possible. This should improve the experience when debugging an executable when the source for which has moved. (#112)
  • Fixed some incorrect variable location info interpretation/usage in the convert and debugger. This should fix some issues with incorrect values being reported by the Watch view.
  • Preference for name matching against later-added global variable symbol debug info, rather than earlier, in cases where PDBs store both (and keep stale global variables around). This should also fix some issues with incorrect values being reported by the Watch view.
  • Added a "Switch To Partner File" command, for quickly switching between e.g. .h and .c files.
raddebugger - The RAD Debugger v0.9.5-alpha

Published by ryanfleury 9 months ago

This release includes the following improvements and fixes:

  • Fixed the debugger's behavior of exclusively locking source files.
  • Fixed failed instances of debug info conversion (e.g. due to currently-unsupported edge cases) spamming fatal exception message boxes. (#64)
  • The debugger will now automatically select the previous search query when performing a textual search, subsequent to an earlier search. (#62)
  • The debugger will now warn if a source code file's timestamp is newer than any of the module files it is currently being used to debug. (#13)
  • Implemented register value committing in watch / evaluation views. (#44)
  • The debugger now includes Address Sanitizer support; it will not stop due to exceptions used to implement Address Sanitizer's shadow virtual address space mapping technique.
  • The debugger will now search for executable-embedded debug info paths relative to the executable, when loading debug info. (#32)
  • The debugger will now allow name mapping that implicitly makes use of the selected thread's current function namespace, when evaluating expressions. For example, evaluating Foo::X when inside of Foo::Function can now be done by evaluating X. (#55)
  • The debugger will now display the decimal version of enum values when mapping the value to an identifier fails.
  • The debugger now has an exception filter setting for DirectX debug layer exceptions.
  • The debugger's file system lister will now display modification timestamps in the local time zone.
raddebugger - The RAD Debugger v0.9.4-alpha

Published by ryanfleury 9 months ago

This release includes the following improvements and fixes:

  • Fixed the debugger holding handles to modules after they'd been closed by the target, while the target re-ran. This solves issues that may have been experienced with hot-reloaded DLLs. (#21)
  • Added support for visualizing base class members when a derived class instance is evaluated. (#48, #35)
  • Fixed memory view's incorrect address visualization in the footer bar. (#50)
  • Fixed debugger displaying incorrect type info for pure virtual class instances.
  • Added support for automatically casting a base class pointer to a derived class pointer, when a class instance is detected to point at the derived class' virtual function table. (#35)
  • Fixed the accidental insertion of a null byte at the beginning of the Output log.
  • Extended the evaluation system's visualizations to include the global variable to which an address points.
  • Automatically fall back on a software implementation for the D3D11 driver, if all other paths fail.
  • Disabled hover evaluation popups while scrolling. (#53)
  • Fixed broken list, omit, and only view rules.
  • Added support for mainCRTStartup and wmainCRTStartup entry point symbol names. (#61)
  • Improved stability of stepping algorithms. (#29)
raddebugger - The RAD Debugger v0.9.3-alpha

Published by ryanfleury 9 months ago

This release includes the following improvements and fixes:

  • Fixed double-initialization of config on first-time startup, which was confusingly causing two windows to open up upon first-time launch. (#33)
  • Fixed line-step-into stopping at jump tables. (#36)
  • Fixed horizontally-scrolled text areas causing repeated (but invisible) animation, causing repeated rendering, even though no visible animation was happening.
  • Fixed RADDBG's usage of stale type information in PDBs, kept around due to incremental PDB writes. This solves many issues with structs sometimes appearing empty in the watch window, structs appearing as older versions of themselves, or values in structs appearing incorrectly. (#35)
  • Fixed RADDBG's interpretation of __fastfail debug events. This solves the issue of a failed assertion appearing as if the target application was hanging indefinitely.
raddebugger - The RAD Debugger v0.9.2-alpha

Published by ryanfleury 9 months ago

This release includes the following improvements and fixes:

  • Fixed crash in some panel deletion cases (#18)
  • Added UI confirmation popup when attempting to exit the debugger when attached to processes
  • Improved Ctrl + Arrow text navigation behavior to better match most editors
  • Fixed crash when resizing memory view in some circumstances (#28)
  • Introduced fallback path to recover if loading broken theme config data (e.g. those produced by #17)
  • Fixed busted type member gathering, when those members happened to be the last ones added to a PDB (should fix issues that may have been experienced when incrementally linking)
  • Changed the type name lookup rules to always prefer ones later in the type table, rather than earlier (should fix issues that may have been experienced when incrementally linking)

Known issues:

  • If %appdata%/raddbg/default.raddbg_user and %appdata%/raddbg/default.raddbg_profile do not exist (e.g. during running for the first time), this version has a bug which causes two default debugger windows to open instead of one. This bug has been fixed in 0c497abba67f5606a1f992a741ec702284a6e976.
  • If a function call redirects first to an unconditional jump dispatch table, rather than the actual destination function, step-into will stop running at the jump table, rather than the function which is being stepped into. This issue has been resolved in 5fe3f56d3311e3d9763998ba006f01e431c9a56d.
raddebugger - The RAD Debugger v0.9.1-alpha

Published by ryanfleury 9 months ago

This release includes the following fixes:

  • Support for thread names set with the newer SetThreadDescription API. (#3)
  • Fixed font paths to missing files specified in user config leading to failed text rendering; the debugger will now always fall back to its baked-in fonts if necessary.
  • Fixed the debugger destructively overwriting font paths specified in user config; the debugger will now always maintain whatever path was loaded.
  • Fixed sluggish animations in the UI when failing to update at a high (>60) refresh rate (but still updating quickly enough to meet a 60+ refresh rate).
  • Disallow overwriting non-RADDBG-config files with config data if accidentally specified, when specifying either a user or profile path. (#2)
  • Fix broken first-time config setup, causing all-transparent theme colors and the appearance of failed UI rendering (#17)

Known issues:

  • The initial 0.9.1 build had a bug with first-time config initialization (#17), which would cause all theme colors to be completely transparent, causing the appearance of failed UI rendering. The build has been fixed and replaced, but if you are still experiencing this issue, you'll want to delete the %appdata%/raddbg folder.
raddebugger - The RAD Debugger v0.9.0-alpha

Published by ryanfleury 9 months ago

Initial alpha release.