Skip to content

The RAD Debugger v0.9.12-alpha

Compare
Choose a tag to compare
@ryanfleury ryanfleury released this 15 Oct 01:02
· 255 commits to master since this release

This release is another substantial one, with several improvements and upgrades to several core debugger systems.

It contains many changes that may impact existing configuration files. If you run into issues or just want a fresh start, it may help to delete your user / project files, although it ideally will still work with old ones.

Like with any large release, a lot of code has changed, and so you may run into new or unexpected issues. If you do, we'd greatly appreciate it if you'd report the issue with as many details as possible. As always, we appreciate your patience, enthusiasm, and willing to give the debugger a try to help it through its alpha phase. Following this release, we plan on doing a larger number of smaller & more focused releases, to focus on usability, reliability, & stability.

Features & Improvements

  • The view rule visualizer systems and the other various visualizer systems (those for source code, the memory view, the disassembly view, and more) have been unified; as such, all visualizers can be used with view rules to provide an interface identical to anywhere else they're used in the debugger. The text view rule is now identical to a source code view. The disasm view rule is now identical to a disassembly view (but just locked to a specific evaluation). Evaluations with these view rules specified in a Watch tab can be popped out to standalone tabs.
  • File paths can now be evaluated (via file:"C:/foo/bar/baz.txt").
  • A new memory view rule has been introduced, which instantiates the hex-viewer memory visualizer for a particular evaluation. This evaluation can include files, meaning this visualizer can be used as a hex-viewer for files.
  • The debugger now supports native drag + drop, so you can drag + drop files onto the debugger to quickly open them. For executable files, the debugger will also present an extra query to either add the executable as a target, and optionally run or step into it. In all other paths, the debugger will open the most appropriate view rule it has; currently, this just includes the text view rule for textual files, and memory for anything else, but this will expand in the future.
  • Custom definitions in the watch window (e.g. x = 123) are now supported in all evaluations, and they're no longer locked to being used within a single Watch tab.
  • Auto view rules have been introduced, which automatically associate a given type expression with a view rule. Unless otherwise specified in a given evaluation's view rule, evaluations of that type will use the associated view rule automatically. (#118, #312)
  • A new slice view rule has been introduced, which attempts to interpret a struct or class as containing a pointer, and an integer encoding the number of elements to which the pointer points, and then visualizes the pointer as pointing to that many elements (as if array was used).
  • A new cast view rule has been introduced, which allows casting of expressions from an evaluation's view rule.
  • A new wrap view rule has been introduced, which allows changing the evaluated expression by containing it within another expression. For example, x with wrap:{$expr + 5} applied, will evaluate as x + 5.
  • The only view rule now defines the order of struct or class members as they're visualized, in addition to its old functionality of choosing which members to show.
  • The debugger now supports evaluations across all loaded modules, with all loaded debug info; you no longer have to select a thread & call stack frame within the module with the debug information with which you want to evaluate. (#185)
  • The debugger now supports evaluation of breakpoint state. This is easiest to do by giving your breakpoints a label (this can be done either by right-clicking them, or by editing them in the Breakpoints view). These can be used to build dependent breakpoints, as these evaluations can be expressed in breakpoint conditions as well. For instance, I can make the condition of one breakpoint: other_breakpoint.hit_count > 0. This condition, in particular, will not incur the usual target runtime performance costs of conditional breakpoints.
  • Similar to breakpoints, the debugger now supports evaluation of thread state. This is not yet supported in conditional breakpoints, but it will be soon. These evaluations can be placed in a Watch window though.
  • All watch-style tabs can be evaluated as watch expressions. Locals can be reproduced in the Watch tab by evaluating the locals expression. Registers can be reproduced by evaluating the registers expression. Globals, via globals, Types, via types, Procedures, via procedures, and so on. This allows all of these collections to be fuzzy-searched together.
  • The debugger now supports evaluations of small (64 bytes or less, currently) string literals, and equality/inequality comparisons between them. These can be used in conditional breakpoint expressions as well. (#213)
  • typeof is now supported in evaluations.
  • The debugger has switched to using the Zydis disassembler library, which contains better correctness & support for newer x86 instructions and extensions. (#259, #169)
  • The autocompletion lister has been greatly improved, supporting the autocompletion of globals, procedures, types, file paths (when relevant), and more.
  • The debugger UI now supports modification of multiple keybindings per command.
  • A new Toggle Watch Expression At Mouse command has been added.
  • The Output view now automatically scrolls to the bottom. This is not configurable yet.
  • A new bring_to_front command has been introduced; it can be used via IPC. (#326)
  • The debugger's text rendering has been improved to improve smoothness and anti-aliasing when appropriate. This can be configured in Settings.
  • The debugger now correctly supports textual hotkeys. If text is not being inserted in the UI anywhere, then textual keys (like n or s or r) can be used for commands.

Fixes

  • The debugger now correctly evaluates AVX-512 register evaluation. (#290)
  • The debugger has a small fix covering a number of unwinding edge cases, which may improve call stack quality. (#313)
  • Ternary operators in evaluations have been fixed.
  • The debugger evaluation visualization systems have been largely rewritten to improve their robustness, correctness, and feature coverage. This eliminates/reduces cases where, previously, view rules would not be applied correctly.
  • A bug was fixed where font paths specified in configuration files would be doubly-escaped, leading to exponential (!) growth of configuration files. Sorry about that one!
  • The debugger now un-minimizes and regains focus when encountering an exception or interruption.
  • The Output view flickering has been fixed. (#278)
  • The Breakpoints view, as well as all other similar views, now support multi-selection, reordering, deletion via the Delete key, and other keyboard shortcuts (as they have been largely deduplicated with Watch or Watch-like views). These should now all behave in a less idiosyncratic way.
  • Many other small fixes and improvements.