December 2, 2024
This was done because running Live++ from portable USB drives or network drives could generate a lot of crash dumps otherwise, filling up disk space
Thank you to Simon Moos from Hello Games for reporting this behaviour.
Thanks to Sebastian Schöner from kerntief for reporting this bug and providing an implementation in the RawPDB library
Thanks to Sergey Hakobyan from Mi'pu'mi Games for reporting this.
This was caused by deduplication not working correctly when DLLs would appear in a certain order
Thanks to Alexandre Ganea from Haven Studios for reporting this.
Thank you to Sebastian Schöner from kerntief for bringing this to our attention.
Thanks to Alexandre Ganea from Haven Studios and Mark Christoforetti from Blizzard Entertainment for reporting this.
This helps when working with processes that use very long command-line options
Thanks to Sebastian Schöner from kerntief for suggesting this.
Thanks to Sebastian Schöner from kerntief and Neil Wallace from Hello Games for reporting this.
Thanks to Olly Ginger from Electronic Arts for bringing this to our attention.
Thanks to Sebastian Schöner from kerntief for suggesting this.
Thanks to Alexandre Ganea from Haven Studios for bringing this to our attention.
September 20, 2024
September 20, 2024
September 10, 2024
While primarily leading to faster loading of plugin DLLs and Agents using fewer TLS slots, this also has the benefit of fixing potential crashes in situations where thread-local storage in the Agent DLL hasn't been initialized yet, such as when calling DbgUiRemoteBreakin.
Thank you to Ales Mlakar for the repro project.
Thanks to Leonardo Santagada from Guerrilla Games for the idea.
Thank you to Ritesh Oedayrajsingh Varma and Jelle van der Beek from Superluminal for reporting this.
Thanks to Sylvain Audi from Ubisoft Montreal for helping with this.
Thanks to Marc Aubert from Eugen System for reporting this.
Thanks to Leonardo Santagada from Guerrilla Games for reporting this.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for reporting this.
July 22, 2024
Thank you to Jim Kjellin from MachineGames for reporting this.
July 9, 2024
Thanks to Florian Schmiderer from Mi'pu'mi Games for reporting this.
Thanks to Dan Printzell from dagg.ai for reporting this.
This required users of non-Live++ aware applications like Unity to restart the application, even though their Live++-enabled modules were correctly loaded and unloaded.
Thank you to Edward Lambert from Sports Interactive for reporting and helping with this.
Thank you to Edward Lambert from Sports Interactive for reporting this.
Thank you to Daniel Jennings from Valve for bringing this to our attention.
Thank you to Julien Charbonneau from Quantic Dream for reporting this.
Thank you to Raphaël Saint-Pierre and Daniel Castonguay from Ubisoft for reporting this.
Thank you to Edward Lambert from Sports Interactive and Leonardo Santagada from Guerrilla Games for reporting this.
May 22, 2024
This makes the PDB reader more robust against (partially) corrupted PDBs.
Thanks to Alexandre Ganea from Haven Studios for bringing this to our attention.
This is useful for ignoring automatically generated code files, such as Unreal Engine's .gen.cpp.
Thanks to Hamza Sood from Criterion Games for reporting this.
May 6, 2024
Thank you to Billy Khan from id Software for reporting this.
April 29, 2024
Spawning the Broker no longer uses the CREATE_BREAKAWAY_FROM_JOB flag.
In the worst case, this could lead to false positives, resulting in relocations being patched at wrong offsets.
Thank you to Raphaël Saint-Pierre and Daniel Castonguay from Ubisoft for reporting this.
Thank you to Daniel Jennings from Valve for the feedback and discussions regarding this change.
In some cases, packets could be blocked by firewall rules, making the Agent hang in LppEnableModule while waiting for a signal
Thank you to Luis Angel Mex and Chris Cooper from Turn 10 Studios for bringing this to our attention.
This is much faster and more robust than trying to determine the symbol RVAs by binary section matching.
Thank you to Hans Sjunnesson for suggesting this.
March 18, 2024
Since most build systems output all object files into the same directory, Live++ uses this as an opportunity to fetch several file attributes at once
This can be configured in the UI tab in the global preferences.
Thank you to Tom Read Cutting from Hello Games for suggesting this.
This can be configured in the UI tab in the global preferences.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for suggesting this.
Thank you to Tom Bui from Valve for reporting this.
January 26, 2024
Consequently, the CompileAndReloadChanges() API has been renamed into Reload() as well.
Thank you to Daniel Jennings from Valve for the feedback and discussions regarding this change.
This can be configured in the Hot-Restart tab in the global preferences.
Additionally, the dialog now focuses on "Leave function" by default and will also remember the last selected action.
Changing any of these options never had an effect, because they weren't serialized correctly into the global preferences file.
Thank you to Sylvain Audi from Ubisoft Montreal for reporting this.
November 30, 2023
Thank you to Kyle Rocha from Jetpack Interactive for reporting this.
The PCH is now recompiled so that it can be used by the native toolchain (e.g. Visual Studio) after the Live++ session has ended.
Thank you to Rick van Miltenburg from Triumph Studios for reporting this.
Thank you to Billy Khan from id Software for reporting this.
October 12, 2023
Thank you to Jim Kjellin from MachineGames for reporting this.
Thank you to Sebastian Schöner from Epic Games for reporting this.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for suggesting this.
September 7, 2023
In certain situations, patch executables could sometimes not be opened for READ/WRITE access because of anti-virus software locking the file during scanning. Live++ now employs a simple backoff and retry logic, and reports any process that might be holding a lock onto a patch executable.
Thank you to the teams at Ubisoft for reporting this.
Spawning the Broker from the Live++ Agent breaks away from any job object the parent process might be associated with.
Thank you to Julien Charbonneau from Quantic Dream for reporting this.
Thank you to Jon Stevens for reporting this.
When trying to read PDB stream data starting at offsets >4GB, an internal calculation would overflow, resulting in the wrong offset(s) being used for subsequent reads. This bug would only manifest itself if the data to be read would actually start at an offset >4GB in the file, so it was subject to how the linker laid out the data in the PDB. (See GitHub commit)
Thank you to Ritesh Oedayrajsingh Varma and Jelle van der Beek from Superluminal for reporting this, and Sebastian Schöner from Epic Games for helping with debugging this issue.
Thank you to Sebastian Schöner from Epic Games for reporting this.
This can be configured in the UI tab in the global preferences.
Thank you to Jonas Tärnström from MachineGames for suggesting this.
Thank you to Sloan Phillippi from Grinnelli Designs LLC for bringing this to our attention.
Thank you to Jack Knobel from Electronic Arts for suggesting this.
Thank you to Sylvain Audi from Ubisoft Montreal for the discussions and feedback on this.
This can be used for having the Live++ runtime (Agent and Bridge) reside in a different directory or even different drive than the Live++ Broker.
Thank you to Jack Knobel from Electronic Arts for suggesting this.
Thank you to Jack Knobel from Electronic Arts for the discussions about this.
August 8, 2023
This allows teams to set up certain preferences for the whole team, while still allowing individual people to configure the remaining preferences as they see fit.
Thank you to Sylvain Audi from Ubisoft Montreal for the discussions and feedback on this.
Thank you to Timo Suikat from Brickadia for reporting this.
Thank you to Timo Suikat from Brickadia for bringing this to our attention.
Thank you to Jack Knobel from Electronic Arts for reporting this.
This was a requirement to ensure that plugins for different platforms don't overwrite files of other existing platforms.
Thank you to Sylvain Audi from Ubisoft Montreal for the discussions and feedback on this.
Clients that don't require to change local preferences can simply pass nullptr as argument.
Thank you to Sylvain Audi from Ubisoft Montreal for reporting this.
July 12, 2023
Thank you to Martin Matouš from Warhorse Studios for reporting this.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for reporting this.
Thank you to Sylvain Audi from Ubisoft Montreal for bringing this to our attention.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for reporting this.
Thank you to Sylvain Audi from Ubisoft Montreal for bringing this to our attention.
Thank you to Bobby Anguelov and Daniel Jennings from Valve for suggesting this.
This matches the behaviour from Live++ 1.x.
Thank you to Sylvain Audi from Ubisoft Montreal for suggesting this.
Thank you to Sylvain Audi from Ubisoft Montreal for suggesting this.
When several modules were registered in the Broker, the UI log was confusing in cases where some modules would be successfully recompiled, while others failed.
Thank you to Martin Mais from Keen Games for reporting this.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for suggesting this.
June 19, 2023
Thank you to Tobias Sicheritz from Mi'pu'mi Games for reporting this.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for bringing this to our attention.
We also added an error message in case no platform plugin can be loaded to make diagnosing this easier in the future.
Thank you to Jorel Ali and Richie Hindle from Cyberscience for reporting this.
Filtering of modules was previously only available for the EnableAutomaticHandlingOfDynamicallyLoadedModules() API, but that only allowed one filter pattern and only had support for built-in Windows wildcards. In order to support more patterns like e.g. regular expressions and allow filtering non-dynamically loaded modules as well, this change was introduced.
Clients that don't require any filtering can simply pass nullptr for both callback and context.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for suggesting this.
Since the Agent and Broker must already be connected in order to call the corresponding API, it does not make sense to alter this preference - it would not have any effect.
This compiler option is required to disable some internal compiler optimizations that behave similar to ICF, folding/aliasing constructors and destructors.
Thank you to Sylvain Audi from Ubisoft Montreal for investigating this.
Some people were having problems with the default connection timeout, because the Broker took to long to start when being spawned by the Bridge.
Thank you to Neil Wallace from Hello Games for bringing this to our attention.
The restarted process will automatically be terminated once debugging stops.
Thank you to Jeremy Laumon from Guerrilla Games for suggesting this.
Breakpoints set early in the restarted process will no longer be missed.
Thank you to Jean Farines from Asobo Studio for reporting this.
Thank you to Jean Farines from Asobo Studio for suggesting this.
Thank you to Jean Farines from Asobo Studio for suggesting this.
This can be toggled in the "UI" tab of the global preferences and is on by default.
Thank you to folks at Asobo Studio for requesting this to be brought back.
Thank you to Tobias Sicheritz from Mi'pu'mi Games for suggesting this.
This matches the default Broker settings.
Thank you to Ryan Juckett for suggesting this.
These changes were done in anticipation of upcoming releases of Live++ for consoles.
May 17, 2023
This was caused by 3rd-party copy protection corrupting Qt's internal messaging system.
Thank you to Zsolt Molnar from Creative Assembly for reporting this.
Thank you to Neil Wallace from Hello Games for reporting this.
Due to a race between two code paths trying to exit the Bridge, the code for reattaching the Visual Studio debugger would sometimes not be able to run.
Thank you to Felix Erksell from Massive Entertainment for bringing this to our attention.
The global mutex that is used for detecting whether a Broker is already running was not global across Windows Services, leading to situations where multiple Brokers would be listening for incoming connections on the same port.
Thank you to Richie Hindle from Cyberscience for reporting this.
When an exception handler is called by the operating system, its internal reference count gets incremented internally to make sure that it isn't removed while being called (see ReactOS source). However, when using the "Leave function" option, the reference count is never decremented again because unwinding the stack does not continue execution at the original call site.
Thank you to Edward Lambert from Sports Interactive for reporting this.
April 18, 2023
April 3, 2023
March 30, 2023
February 27, 2023
February 17, 2023
February 8, 2023
October 7, 2022
September 7, 2022
September 1, 2022
August 24, 2022
August 16, 2022
July 26, 2022
May 4, 2022
November 11, 2021
July 19, 2021
March 26, 2021
December 22, 2020
November 25, 2020
November 23, 2020
October 30, 2020
July 20, 2020
January 27, 2020
August 1, 2019
July 9, 2019
June 4, 2019
April 12, 2019
April 8, 2019
January 28, 2019
November 22, 2018
September 24, 2018
July 11, 2018
May 30, 2018
May 24, 2018
May 23, 2018
May 22, 2018
May 11, 2018
April 30, 2018
April 25, 2018
April 23, 2018
April 12, 2018
April 10, 2018
April 6, 2018
March 29, 2018
Fully featured, no registration required, no strings attached.