Lux Changelist

Alpha 13 (1.11)

Released November 2, 2021

This month Lux introduces the ability to load the symbols of any dlls that the application loads, along with our usual UX improvements and bug fixes. Lux also made significant progress on performance improvements for animations and native visualizers.

  • Lux will now load the program database (.pdb files) and associated symbols for all dynamically and statically linked .dlls loaded while the application is running.
  • Lux will now display all strings in the processes panel using UTF-8 encoding by default.
  • The user can now pause a running application at any time.
  • Lux will now highlight the line of code whenever the user clicks a stack frame in the processes panel or uses "Go to definition".
  • Lux will now automatically save a printpoint when execution stops because the application encountered a breakpoint.
  • Lux will now display the pointer value of char* strings and other pointers in addition to the string/object contents.
  • Error messages with .pdb files could not be loaded have been improved.
  • Lux will now properly pause the debugged application when encountering a wider range of exceptions, eg stack overflows and C++ exceptions.
  • Lux will no longer use the 8x prefix to denote 8-byte hex integers, 4x for 4-byte, etc. The standard 0x prefix will now be used for all hex integers.
  • Clicking outside of the breakpoint foldout, symbol foldout, or file searcher will now close them.
  • The user can now select text in text areas.
  • The file searcher will now show default search results even if no text has been typed in its search box.
  • The Lux installer will now prompt the user to start the application automatically after install.
  • PERFORMANCE: Lux will now avoid reloading .pdb files that haven't changed since the last time they were loaded.
  • PERFORMANCE: Significant improvements to framerate during animations.
  • PERFORMANCE: Significant improvements to native visualizer rendering, especially for std::shared_ptr and std::weak_ptr.
  • PERFORMANCE: Significant improvements to the performance of printpoints, and other areas of code that have to process stack captures.
  • BUG FIX: Lux will no longer print in the log that the application encountered a breakpoint in some cases where it actually encountered a printpoint.
  • BUG FIX: Fix for some variable values in the processes panel erroneously showing "..." until the window was resized.
  • BUG FIX: Lux will no longer activate the window and show the line of source code automatically when the application passes a printpoint.
  • BUG FIX: Fix a crash if the user opens the processes panel overlay, goes back to the launcher screen without closing it, then opens a project again and starts debugging.
  • BUG FIX: Fix for the find panel (Ctrl-F) finding results for the wrong source pane in some cases.
  • BUG FIX: Avoid some errors that were displayed in the log when the user placed a breakpoint on the same line of code as a procedure call and then single-stepped onto that line.
  • BUG FIX: Fix a crash when displaying zero-length arrays in the processes panel.
  • BUG FIX: Fix a crash in rendering pointers to the very top of the address space.
  • BUG FIX: Fix empty printpoints not displaying in the log.
  • BUG FIX: Fix clicking "Definition not found" would, if clicked, take the user to whichever symbol had previously been found.
  • BUG FIX: Fix clicking the "Search files" button would not keep the search text area selected by default, requiring the user to click it to search for files.

Alpha 12.1 (1.10.1) Hotfix

Released October 7, 2021

  • BUG FIX: Fix the "Add an executable" button not appearing if the user has no launch configs in their list.

Alpha 12 (1.10)

Released September 28, 2021

For this month we focused on building out support for native visualizers and improving stability.

  • Native visualizers now supported for std::unordered_map.
  • Lux will now correctly use native visualizers when displaying a preview of a user-defined type with members that use native visualizers.
  • Lux will now display data in base classes as part of the preview of user-defined types.
  • An array of char is now displayed as a string in the processes panel.
  • Go To Definition can now be used for user-defined types that are not templated.
  • Go To Definition can now be used on user-defined types that are part of cast expressions.
  • Lux will now try to reduce execution of non-active threads while stepping through code. (Only applies to Step Into and some parts of Step Over. Step Out will still run all threads.)
  • Some minor UX and UI bug fixes and improvements, including mouseover tooltips for the debugger interface.
  • PERFORMANCE: Significant performance improvements whenever the debugger has to process a new stack, for example when stepping through code. (See some of the work done on this feature in our development stream.)
  • PERFORMANCE: Fix a performance regression when a native visualizer had an error in displaying.
  • BUG FIX: Fix problems displaying native visualizers when the type being visualized involves multiple templated types from different namespaces.
  • BUG FIX: Fix an occasional crash if the user deletes the pdb, recompiles, and then steps through code with the recompiled binary and pdb.
  • BUG FIX: Fix a crash if the user deletes the pdb for the application and then tries to debug by pressing F11.
  • BUG FIX: Fix an error where if the user does Step Over and a checkpoint is created at the same time as the application created a thread, then the user wouldn't be able to step anymore.
  • BUG FIX: Fix a crash when displaying native visualizer for std::unordered_map.
  • BUG FIX: Fix incorrect stepping over lines that the compiler has marked "Never Step In" (for example, stepping into lambdas had this problem.)
  • BUG FIX: Fix an occasional crash when hovering over a procedure parameter in the processes panel.
  • BUG FIX: Fix a crash when loading source files with the byte order marker.
  • BUG FIX: Fix a crash when loading source files with the char8_t type.
  • BUG FIX: Fix a regression of being unable to step through source code that's not in the same location as where it was compiled.
  • BUG FIX: Fix a crash when loading binaries that do not include the CRT.
  • BUG FIX: Fix the processes panel sometimes closing as soon as it opens when clicking on saved checkpoints and printpoints.
  • BUG FIX: Fix a crash when the user adds a breakpoint while stepping, then stops the application, then recompiles, then runs to the breakpoint and deletes it.
  • BUG FIX: Fix an occasional crash when viewing a variable with a type including a reference.
  • BUG FIX: Fix saved checkpoints not always being expired if DLLs were loaded or unloaded, threads created or destroyed, or debug output sent to the debugger.

Alpha 11 (1.9)

Released August 31, 2021

For this month we focused on building out support for native visualizers and improving stability.

  • Lux now supports many more native visualizers.
    • std::bitset
    • std::shared_ptr
    • std::weak_ptr
    • std::optional
    • std::array
    • std::deque
    • std::tuple
    • std::map<std::vector>
    • std::vector<int> (regression)
    • std containers of user-defined objects not in the std namespace
    • References and pointers to natvis objects now display the natvis object correctly
  • Improved variable displays in the processor panel.
    • Arrays, user-defined types, and pointers and references to arrays and user-defined types will now show previews of their elements/members inline when the node is not open.
    • const char* now displays as a string.
    • Pointers and references to functions, void pointers, and pointers-to-member-function now display the symbol name of the function pointed to, if available.
    • Pointers-to-member now display the class/struct member being pointed to.
  • The names of enumerands in enum and enum class variables will be shown rather than the integer numbers.
  • Pressing F9 will now automatically create a breakpoint (or destroy it if one already exists) at the current line of execution.
  • Stack frames for which the debugger can't find a symbol name are now displayed with the module name and an address, eg "kernel.dll!8x1234abcd".
  • Lux will now print to the console when it recognizes a break due to an uncaught C++ runtime or .NET exception.
  • Lux will now show the program entry point upon opening a launch config even if the executable doesn't use the default CRT 'main' entry points.
  • Lux will now print the integer value of unprintable characters instead of a '?' question mark.
  • Ctrl-O will now open the file searcher.
  • Updated colors to help differentiate the current stack frame current line indicator from lower stack frames in source code.
  • PERFORMANCE: Reduced load time for applications with very large .pbd files.
  • PERFORMANCE: Improvements to code stepping and producing a stack.
  • PERFORMANCE: Eliminated a four-second stall on startup for some users.
  • BUG FIX: Fix a regression where the current line indicator did not appear as partially complete when it should.
  • BUG FIX: Fix a crash if the user runs the app, does some stepping, then stops and re-runs the app and immediately saves a checkpoint.
  • BUG FIX: Fix a crash if a file had two newlines in a row inside of a multi-line comment.
  • BUG FIX: Fix hex numbers omitting the last digit.
  • BUG FIX: Fix a rare crash when displaying variables in the processor panel for which the guest process memory is not immediately available.
  • BUG FIX: Fix "Go To Definition" going to the declaration instead when the definition isn't in the same translation unit.
  • BUG FIX: Fix a rare crash caused by opening and closing multiple projects in rapid succession.
  • BUG FIX: Fix a number of instances of incorrect behavior after using source step in while sitting at a breakpoint.
  • BUG FIX: The arrow keys were not working in the file searcher unless the mouse happened to be hovering over the file searcher.
  • BUG FIX: Fix a crash if the user swaps a 64-bit binary (which Lux support) for a 32-bit binary (which Lux does not support) and then tries to load the launch config.
  • BUG FIX: Fix a crash if the debugger stops because of guest application crash and then the user tries to continue running two times.
  • BUG FIX: Fix an uncommon crash on the second or subsequent times the guest application is run.
  • BUG FIX: Avoid a crash when loading binaries compiled with clang. (Note: Lux does not yet support binaries compiled by clang.)
  • BUG FIX: Fix an occasional crash when clicking on symbols that could not be found.
  • BUG FIX: Fix a regression causing a binary not to be writable while Lux has a launch config for it open, but not currently running.

Alpha 10 (1.8)

Released August 1, 2021

In addition to creating a publicly available demo, we continued with building out new features and bug fixes aimed at performance and usability in very large projects.

  • Lux is now available as a public demo.
  • Procedures whose name are unknown are now displayed by their address in memory.
  • PERFORMANCE: Reduced startup time by about one second. (Startup now takes less than one second.)
  • BUG FIX: Fixed Lux being unable to close or stop debugging while a "Step Over" operation was in progress.
  • BUG FIX: Fixed a crash when trying to display the natvis for std::chrono::duration.
  • BUG FIX: Fixed a crash that would sometimes occur when using C++17 or later features in a source file.
  • BUG FIX: Fixed a crash if the pdb has to identically defined symbols with different ids.

Alpha 9 (1.7)

Released July 5, 2021

We continued with building out new features and bug fixes aimed at performance and usability in very large projects.

  • Go To Definition now recognizes macros.
  • Added user interface animations for various operations, e.g. scrolling, stepping through code, and the Processes Panel Overlay appearing and disappearing.
  • Variables consisting entirely of special memory patterns (eg "Uninitialized stack" and "Freed heap") are marked as such in the Processes Panel.
  • The Processes Panel marks when a procedure is in its prologue (the stack is not yet set up and no variables have been initialized yet) or epilogue (destructors are about to execute).
  • Hovering a symbol in the Processes Panel will now highlight all references to that symbol in the code.
  • Stepping into a procedure with no associated source code will now produce a "Source Code Unavailable" tab instead of crashing. "Step Into" and "Step Over" are disabled in this case, but the user may "Step Out" back to available source code.
  • Updates to the user interface design of the breakpoint foldout, the file searcher, and a few other areas.
  • Improved scrolling behavior for keeping the current line of code on screen when stepping through code.
  • The logging panel will now always remain scrolled to the bottom if the user has already scrolled it to the bottom when new text comes in.
  • Minor improvements to syntax highlighting.
  • PERFORMANCE: Greatly improved the rendering performance for very large source code files.
  • PERFORMANCE: Improved Step Into and Step Over performance in very large projects.
  • PERFORMANCE: Improved performance when showing the stack in the processes panel when running and viewing viewpoints in very large projects.
  • PERFORMANCE: Improved performance when gathering local symbols to display in the processes panel.
  • PERFORMANCE: The code view text renderer and syntax highlighter received some minor performance improvements.
  • PERFORMANCE: Minor improvements to the time to begin debugging an application.
  • BUG FIX: Fixed incorrect "Step Over" behavior in recursive code that left the user more deep in the recursion than expected.
  • BUG FIX: Fixed source files without extensions (ie STL header files) unable to use features like Go To Definition and finding references.
  • BUG FIX: Lux is now able to open .pdb files that other applications already hold currently open.
  • BUG FIX: Fixed a when opening and closing many projects in quick succession.
  • BUG FIX: Fixed a crash that occurred sometimes when the user closes Lux.
  • BUG FIX: Fixed a crash when hovering a stack frame or symbol in a file that isn't currently open in a source code tab.
  • BUG FIX: Fixed a crash when stepping out of computationally intensive procedures in very large programs.
  • BUG FIX: Fixed a hang when stepping over procedures that write a lot to standard output.
  • BUG FIX: Fixed a crash if the user presses the "Step Over", "Step In", or "Step Out" buttons after the debugged application starts but before the application reaches execution of the main procedure.
  • BUG FIX: Fixed incorrect behavior if the debugger failed to start debugging an application (eg an invalid executable).
  • BUG FIX: Fixed the inability to update a printpoint with a new message.
  • BUG FIX: Lux will now correctly understand relative paths in symbols files.
  • BUG FIX: Fixed a crash when the user hovers a variable in a stack frame that no longer exists of a saved printpoint or checkpoint.
  • BUG FIX: Fixed if the user moves the mouse while hovering the top stack frame and stepping out of the frame at the same time.
  • BUG FIX: Fixed detection of the main thread sometimes failing.
  • BUG FIX: Fixed a crash when stepping into images other than the primary .exe being debugged.
  • BUG FIX: Fixed a crash if the user presses F5 twice in quick succession.
  • BUG FIX: Fixed the file searcher sometimes not finding a file properly.

Alpha 8 (0.12)

Released December 1, 2020

We continued this month with building out new features and bug fixes aimed at performance and usability in very large projects.

  • Major performance improvements while loading and stepping through code in projects with very large .pdb files.
  • Go To Definition can now find symbols that are defined in angle-bracket includes (ie "#include <file>")
  • File searcher fuzzy search: Typing "abc" will match a file called "alpha-beta-charlie"
  • Syntax coloring now works properly with multi-line comments.
  • Lux will now remember and reopen with the same window dimensions.
  • BUG FIX: Avoid a crash when saving checkpoints and there are memory pages marked as PAGE_EXECUTE_READWRITE or PAGE_EXECUTE_WRITECOPY.
  • BUG FIX: Fixed a crash regression when examining 32-bit binaries in the launcher.
  • BUG FIX: Fixed a crash when non-ASCII characters are present in a comment.

Alpha 7 (0.11)

Released November 1, 2020

This month we focused mainly on one big feature, still with the focus of improving the experience of debugging very large projects.

  • Go To Definition: Clicking on some symbols will present a Symbol Information panel, which shows the file and line of the definition and allows the user to go to the definition point.
  • Improved Processes Panel design.
  • Updated the pause button graphic to match the other button graphics.

Alpha 6 (0.10)

Released October 5, 2020

This month we made significant progress on a major UI upgrade and included a few new features and bug fixes aimed at performance in very large projects.

  • Major update to the UI for the launcher and processes panel.
  • The launcher will now show the executable icon for an application.
  • Lux now better handles reloading the executable and symbols when they update, to allow recompiling between debug sessions.
  • Lux now supports showing values for local variables that are referenced relative to the RBP register rather than the RSP register. (This occurs if the user is debugging with Edit and Continue enabled.)
  • Lux now shows thread names when set by the SetThreadDescription procedure of the Windows API. (Requires Windows 10.)
  • Lux now automatically detects and labels the main thread, if it has not already been named.
  • Lux will now default to looking for the symbols file specified on the link command line /pdb switch. If none exists, it will fall back to looking for ExecutableName.pdb.
  • PERFORMANCE: Improved the time to open a launch configuration and display the source file containing main, especially when the symbol database is very large.
  • BUG FIX: Fixed a crash when breakpoints are created on lines of code that later become invalid.
  • BUG FIX: Fixed a crash in rare situations when stepping out or over code.
  • BUG FIX: Fixed crashes in some cases when Lux encountered some NatVis expressions that it doesn't yet support.
  • BUG FIX: Fixed the window contents blanking out when Lux is dragged partially over the border of the screen.

Alpha 5 (0.9)

Released September 1, 2020

This month we focused on an extension to checkpoints and improvements on the new user interface. We also continued work increasing stability.

  • Users can now turn breakpoints into checkpoints, which are breakpoints that automatically create a saved checkpoint state and do not stop execution.
    • Semantic note: From now on, to distinguish the two types of checkpoints, a checkpoint created from a breakpoint will be called a "checkpoint" and a checkpoint that represents the saved state of the debugged application will be called a "saved checkpoint".
  • The first major UI art improvements, including button images and theme updates.
  • The log will now print the id of threads that exit.
  • BUG FIX: Fixed an uncommon crash if an executable has a thread added while it is paused (for example by remote thread injection.)
  • BUG FIX: Fixed a crash if the user tries to run a config for an executable that doesn't exist.
  • BUG FIX: Fixed a crash if the user deploys the configuration information panel for an executable missing a .pdb file.
  • BUG FIX: Fixed a crash that could happen if the user pressed the run button twice before the debugged program could completely initialize.
  • BUG FIX: Fixed a crash when loading an .exe with a hard dependency on a missing .dll.

Alpha 4 (0.8)

Released August 2, 2020

In addition to completing Checkpoints, we focused this month on the user experience on the main debugging screen. We also invested a lot of time into our automated testing solution, with the promise of increased stability and fewer regressions in future versions.

  • Checkpoints are now enabled.
  • Interface upgrades:
    • Syntax highlighting.
    • Monospace code font.
    • Updated the layout of the debugging screen.
    • Updated the indicators for the current line of execution. Partial completion of a line of code will now display differently than when the point of execution is between two lines of code.
    • The Processes Panel will now allow the user to scroll if its contents exceeds its size.
    • Minor improvements to other line indicators like breakpoints, printpoints, and checkpoints.
    • Source code tabs are now properly dynamically sized for the length of their label.
  • PERFORMANCE: Improved rendering performance of large source code files.
  • BUG FIX: Fixed an occasional crash if the debugged application created printpoints and then immediately exited.
  • BUG FIX: Fixed a crash on load if Visual Studio is not installed on the system.
  • BUG FIX: If there are no symbols in scope and then new symbols come into scope, they will now appear correctly.

Alpha 3 (0.7)

Released June 28, 2020

  • Introduced Dark Mode.
  • Improvements to the Debug Configuration screen.
  • The code text area now displays all available breakpoint locations when hovering the breakpoint area. Breakpoints may only be placed in these locations.
  • Text boxes now have a cursor that blinks and can be moved with mouse clicks and keyboard presses.
  • Scroll bars can now be dragged with the mouse and paged by clicking in the gutter.
  • Printpoints now print when the current line of execution steps onto the printpoint line, not when it steps off.
  • BUG FIX: Stepping over a procedure that calls another procedure that has a printpoint inside caused the debugger to incorrectly stop after exiting the innermost procedure.
  • BUG FIX: Corrected a rare crash that sometimes occurred when the user began a new debug session.
  • BUG FIX: Corrected an incorrect "First-Chance Exception" message and the program counter failing to advance when the user creates a checkpoint on a line of code that executes an immediate write and then steps continues running.
  • BUG FIX: Corrected a crash that sometimes occurred when the user saved a breakpoint a second time.
  • BUG FIX: Fixed a regression where breakpoints wouldn't work on the second run of the debugged application.

Alpha 2 (0.6)

Released June 8, 2020 (Delayed one week in deference to BLM protests)

  • The processes panel now displays the logical contents of some std containers (using Visual Studio NatVis data.)
  • The processes panel now wraps text when displaying symbols and frames.
  • Lux now uses a subpixel-rendered TrueType font.
  • There is now a "Back" button that returns the user to the Debug Configuration screen.
  • Ctrl-P will now open the File Searcher.
  • Ctrl-F will now open a Find panel that searches the current file.
  • Lux no longer locks the .pdb file of the debugged application. (This was blocking application re-compilation even if Lux was not currently debugging.)
  • If the user doesn't specify a default working directory, the directory used will default to the directory of the executable.
  • An exception message is no longer printed every time the debugged application encounters a breakpoint, now it prints only for non-breakpoint exceptions.
  • BUG FIX: Correction for the processes panel sometimes displaying the wrong symbol name in a frame's locals.
  • BUG FIX: Lux will no longer run the debug app immediately when the debug configuration is loaded, now waiting for the user to press the 'Run' button.
  • BUG FIX: Lux will no longer crash on close.
  • BUG FIX: Corrected a number of uncommon crashes that would occur when debugging code, caused by Lux's memory cache.
  • BUG FIX: Corrected a crash that would occur if the user used Step Out while hovering the top stack frame in the Processes Panel.
  • BUG FIX: The code text area will no longer sometimes display multiple scroll bars when resizing the window and switching tabs.
  • BUG FIX: Corrected a rare crash when starting an application by stepping into it (eg with F11.)
  • PERFORMANCE: The Lux debugging engine now avoids sending duplicate memory contents back to the user interface if those contents have not changed.

Alpha 1 (0.5)

Released April 29, 2020

First public alpha.

Help us build the next generation of debuggers.