This release contains several improvements to debugger performance, stability, bugfixes, and some new features.
Debugger Changes
Majorly improved initial load performance, particularly for very large projects with many DLLs/PDBs.
Majorly improved global symbol identifier resolution performance in the debugger, which most notably will help the UI's performance when very large projects with many DLLs/PDBs are loaded. (#439)
Adjusted process control, so that if there is a selected thread, it will attempt to coax the kernel into scheduling that thread first for a short time. This dramatically improves the stepping and breakpoint experience, particularly in heavily multithreaded code, but even on projects with many threads (even if code that is only touched by a single thread is being debugged).
Added visualization for scopes containing the cursor to the text visualizer (used in viewing source code). This can be turned off via the Cursor Scope Lines setting, which can be found in the palette.
Expanded the palette to include all source files found within loaded debug information, so even if certain files relevant to a project have not been loaded yet, they can be found easily via the palette, or the lister used for the command.
Switch
Expanded the IPC external driving system to further support command parameters, like targets, threads, and breakpoints. These can be referenced via their label identifier if they have one (e.g. my_breakpoint), their details (e.g. C:/foo/bar/baz.c:123, foo.exe --bar --baz), and their index in the collection of all entities of the same type (e.g. breakpoints[0]). (#445, #571) Below are some usage examples:
Expanded the IPC external driving system to support returned information from a command. For instance, a command like add_breakpoint will return the internal ID that the debugger uses to identify that breakpoint. This can also be used to precisely refer to the breakpoint in subsequent IPC commands.
Added the ability to clear the Output log, via the Clear Output command. (#143)
Adjusted the Bitmap visualizer to hook into the debugger's "rich hover" system. This means that, when pixels are hovered in the Bitmap visualizer, the same memory ranges will highlight in other visualizers.
Added a symbolof operator in the evaluation system, which will round an address evaluation down to the containing symbol address, if there is one.
Added the ability to pass a user or project file to the debugger via command line, without using special argument flags; fixed the debugger interpreting that as a target command line. (e.g. raddbg my_project.raddbg is now possible.) (#560)
Fixed the debugger not applying type views when the associated type was evaluated through a pointer or reference. (#588)
Fixed incorrect treatment of signed and unsigned integer casting in the evaluation system. (#562)
Fixed incorrect treatment of sub-64-bit integers in the evaluation system.
Fixed the debugger unnecessarily stripping enum types (and thus falling back to the underlying basic integer type) when accessing enum types through pointers or references.
Fixed the debugger unnecessarily prohibiting casts involving enums and bitfield types. (#565)
Fixed a number of instabilities and crashes related to the new asynchronous call stack computation system. (#535, #554, #550, #530, #556, #568, #574)
Fixed a number of instabilities with the recently-changed asynchronous process memory reading system, which was rarely causing process memory to not correctly be updated, thus causing watch windows to show stale values. (#502)
Fixed case changes of certain paths the debugger would make when converting PDB to RDI debug information.
Fixed the debugger's treatment of debuggee-produced data breakpoint hits (when the debuggee modifies its own registers to set a data breakpoint). The debugger will now correctly stop and report these hits, even though they do not correspond to the debugger's own breakpoint state.
Fixed the debugger not correctly writing Unicode data to the clipboard.
Fixed the debugger incorrectly setting read-only data breakpoints. These are not supported in hardware on x64, so in this case, a read-write data breakpoint is set instead.
Linker Changes
The linker is unchanged since 0.9.20. Some big new changes are in flight, so this release just contains the 0.9.20 binary, rather than that from the top of master.
Binary Utility Changes
The radbin binary utility is unchanged since 0.9.20.