Skip to content

The RAD Debugger / Linker v0.9.14-alpha

Latest
Compare
Choose a tag to compare
@ryanfleury ryanfleury released this 16 Nov 01:07
· 61 commits to master since this release

This release contains some small features, many bugfixes, and many performance improvements:

Debugger Features & Improvements

  • The performance of the debugger's fuzzy searching mechanisms (used in autocompletion tooltips, debug information tables like Types or Procedures, and the interfaces for Go To Name and Add Function Breakpoint) have been greatly improved to be done in parallel. This will be most noticeable in larger projects.
  • The debugger now does per-module syntax highlighting (for globals, types, procedures) in parallel, on background threads. This improves the performance of the debugger UI with larger projects.
  • Many other various features in the debugger's UI and frontend have been tweaked to support better performance, particularly with larger projects.
  • The debugger now preemptively converts adjacent PDBs to the RDI format in parallel using a limited heuristic rule. Debuggers learn of loaded DLLs serially, and they must analyze debug information for each DLL as it is loaded, before any more are loaded (to ensure that breakpoint resolution occurs correctly before resuming the target program). This means when a project loads many DLLs, it forms a long chain of serially-dependent work. For the RAD debugger, the most expensive part of this process is the conversion from PDBs to RDIs (after RDIs are produced, it is nearly instantaneous to load them). This heuristic rule is intended to, in a conservative manner, locate adjacent DLLs which are likely to be loaded given the filesystem's directory structure, and given the set of modules already loaded, and preemptively convert the PDBs for those DLLs, so that when a target application does load those DLLs, the RDIs are already prepared. This should help initial startup times for larger projects, after a clean rebuild, which use many DLLs (once the RDI files are produced, they do not need to be recreated until the DLL is rebuilt, so they can be cached in the common case in such projects).
  • The debugger now accounts for DPI when choosing font sizes on first-time startup. (#341)
  • The debugger now defaultly does not attach to subprocesses; this is more optimal for certain project styles. For the cases when the old behavior is desired, automatically attaching to subprocesses can now be enabled on a per-target basis.

Debugger Fixes

  • The debugger now supports cancellation of fuzzy searching, which was previously causing delays when killing processes with a large number of large DLLs loaded (because a slow fuzzy search was still occurring in the background).
  • The debugger now correctly handles unary + operators.
  • The debugger now correctly parses exponentiated numeric literals. (#323)
  • In cases where debugger collections like modules, registers, and so on, were found as symbols in an attached program (e.g. local or global variables), the debugger would incorrectly display the Locals, Registers, or Modules views. This has been fixed. (#337)
  • Some cases of incorrect syntax highlighting in disassembly views were fixed. (#337)
  • A bug where the memory view would show incorrect byte values at certain scroll positions has been fixed. (#353)
  • A bug where 64-bit bitfield types were not displaying correctly has been fixed. (#355)

Linker Features & Improvements

  • Added detection for libs without extension specified with /defaultlib and directive.
  • Added /nod alias for /nodefaultlib
  • Switched symbol table data structure to hash trie map.
  • Added logic for handling communal variables.
  • Added /rad_pdb_hash_type_names that replaces type names with hashes, helps cut down TPI stream size.
  • When /debug:fastlink is specified linker shows an early warning.
  • Reduced number of memory copies needed to serialize image.

Linker Fixes

  • Fixed section number promotion to 32 bits bug when creating COMDAT associations in big objs.
  • Fixed build errors and warnings on Linux.