# v0.9.24-alpha ## Debugger Changes - Added the ability for the debugger to load, use, and evaluate using debug info, even when not actively debugging. The debugger will now keep a process' debug info loaded, even after the process ends. It stores the set of loaded debug info files in the project configuration file, meaning it will also automatically load the same debug info across many runs. Debug info can also be loaded manually (without ever launching a process) with the `Load Debug Info` command. There is also a new tab, `Debug Info`, which allows viewing and managing the set of loaded debug info files. - Improved the debugger's behavior when used as a drag & drop target, to allow for debug info loading as an option (when relevant), and to better handle the case where many files (potentially of different types) are dropped together. - Improved debug info searching performance and reponsiveness in large projects. - Fixed some crashes and incorrect results with the new `list` view. - Fixed some cases where RDIs did not contain some basic types from their originating PDBs. - Allowed `.` and `->` operators to be used with array types. - Fixed the debugger's treatment of quoted command line arguments when building targets. In previous versions, calling `raddbg main.exe "foo bar baz"` would create a target `main.exe` with arguments `foo bar baz` (dropping the quotes). This is now fixed, such that the target's arguments string will also contain the quotes, and pass them to the target when launched. - Fixed the debugger not correctly responding (through font and UI scale) to DPI changes. - Fixed the debugger incorrectly generating conflicting source line info records in PDB -> RDI conversion, which in some scenarios was preventing source line maps from working (leading to breakpoint resolution failing). - Other small fixes, improvements, and tweaks. # v0.9.23-alpha ## Debugger Changes - Further improved PDB -> RDI conversion performance & memory usage. - Adjusted limits for the amount of PDB -> RDI conversion work that the debugger will kick off, to prevent PDB -> RDI conversion interfering with debuggee performance. - Reintroduced the `list` lens, which gathers all nodes in a linked list, and visualizes them as a flat list of pointers (the same as how an array of pointers is visualized). - Fixed a crash when closing empty Geometry 3D views. (#652, #657) - Fixed the debugger not visualizing `enum` types when evaluated through a bitfield type. (#655) - Fixed the PDB -> RDI conversion not correctly generating location information for function parameters, when the EXE/PDB were built to include support for Edit and Continue (`-ZI` switch). (#656) ## Binary Utility Changes - Fixed a crash when using the `--compress` option, when generating RDI files. # v0.9.22-alpha ## Debugger Changes - Further improved PDB -> RDI conversion performance. - Capped the number of additional threads / processes spawned for PDB -> RDI conversion. - Prioritize PDB -> RDI conversion based on what is actually found to be necessary by the debugger, rather than converting all PDBs in the order in which they're discovered. - Added preliminary support for DWARF -> RDI conversion on Windows. - The debugger now relies on source file checksums to determine whether or not a source file is out-of-date with respect to what was compiled when debug info was produced, rather than just the modification timestamp. - The debugger now will rely on debug info to detect the language of source code files, if it cannot infer from the source file's extension, or view settings. This will enable features like syntax highlighting and hover evaluation in cases like `.inl` files being included in C++ projects. - The debugger now will restore the last focused window when continuing automatically. (#245, #596) - Watch tables have been simplified in that they no longer have a separate column for evaluation types, since this was usually taking a lot more space than it deserved. The type of evaluations is still displayed in watch table cells, and it can always be evaluated directly via `typeof`. - Type evaluations have been simplified in watch tables as well; they no longer have untitled columns for sizes and offsets, this is instead displayed as an extra note by default. Similar behavior to the original behavior can still be obtained using the `columns` view, if needed. - The debugger no longer uses complex `union` types for most registers, and instead just displays the register value plainly. - The hover evaluation UI has been made larger when needed. - The debugger now prefers matching global, function, and type identifiers to the most relevant debug info and module in context; this fixes evaluation in some multi-process debugging contexts. (#581) - Fixed the debugger unnecessarily stripping `enum` type information when accessed through array operators. (#634) - The debugger now understands a standalone `unsigned` keyword as an `unsigned int` type, to match C rules. - The debugger now uses the current working directory to form the working directory for targets specified on the command line, to match behavior when running a command from the command line without the debugger. - Improved call stack computation performance. - Improved debugger memory usage over long periods of time. - Fixed string-pointer comparison not working with not-equal (`!=`) operations. - Fixed a bug which was causing bad debuggee performance on some threads after some interactions with the debugger controller. - Fixed incorrect results when adding two register values. (#642) - Fixed the interpretation of register expressions in visualizers. (#649) - Fixed "forever loading" states in disassembly views in some cases. (#643) - Fixed jittering on window resizing. (#636) - Fixed the bitmap visualizer crashing in some circumstances relating to unsupported bitmap sizes. (#444, #563) - Fixed a crash when an empty `cast()` expression would be evaluated. (#625) - Fixed a crash when an invalid expression would be visualized using the `text` view. (#647) ## Linker Changes - Changed symbol resolution in libaries to match MSVC behavior. - Optimized image building step to reduce memory usage. - Linker memory maps all input files by default to lower memory usage. (`/RAD_MEMORY_MAP_FILES`) - If debug info is available, linker uses it to show file and line number for unresolved relocations. - Improved base relocation build performance for large images, cutting build time by 70%. - Added stubs for `/Brepro`, `/D2`, and /ErrorReport to improve compatability with existing response files - Implemented section garbage collection (`/OPT:REF`) - Fixed bug where thread local variables pointed to incorrect types. - Changed rules for weak and undefined symbols, now weak symbol is not allowed to replace an undefined symbol. - Linker no longer creates thunks for imports that don't require them. ## Binary Utility Changes - The binary utility, like the debugger, now can convert DWARF debug info to RDI files. When both DWARF and PDB info is present, it can now convert both, and produce a single final RDI file with all information. - Textual dumping of RDI files is now done in parallel, massively improving dumping performance. - PDB -> Breakpad conversion performance has now been parallelized to a greater degree, improving performance.