When your Delphi IDE suddenly skips unsaved changes during compilation(TL;DR: watch early signs your IDE is hosed, then restart without saving)
Posted by jpluimers on 2021/03/24
A while ago, I observed that when compiling, my Delphi IDE would not take into account unsaved changes any more.
This ws in a time when I was tracking down some hard to reproduce problems of code that sometimes would and sometimes would not compile at all.
The solution was this:
[HKEY_CURRENT_USER\Software\Embarcadero\BDS\18.0\Compiling]
"BackgroundCompilation"="False"
Somehow, the Delphi IDE had turned this flag to True
without me telling it did, nor me changing an option (heck if you do a “Delphi” “BackgroundCompilation” – Google Search you hardly get any meaningful results).
Luckily, I did remember what happened around the bahaviour change: the compiler had encountered a strange error, and the IDE had become unstable.
With an unstable IDE, I did have seen damage in saved source files in the past, so I always use version control with Delphi as that allows easier to spot file differences.
What I did not anticipate was that it could corrupting my persisted IDE settings, though every now and then.
Detecting early signs of the IDE becoming unstable
- any internal compiler error (AV or not)
- refactoring not succeeding while it should
- insert mode suddenly becomes override or vice versa
- editor block selection is suddenly turned on
- any access violation or pointer error exception
Sometimes (but not always) these can be early signs too
- debugger blue dots not matching compiled code lines
- the debugger not being able to debug code despite blue dots being there
- properties in the object inspector having changed without manual action
Be prepared for an unstable IDE
- Save your work often
- At the earliest sign of an unstable IDE: kill (do not save work!) the affected bds.32 process using Process Explorer
BackgroundCompilation
A “Delphi” “BackgroundCompilation” – Google Search did not get much relevant results. Below are the most relevant ones I could find from it:
- [WayBack] kinode/delphi5_cu_nmd_09.reg at master · tm1/kinode · GitHub
- [WayBack] bcc32pch – commandline compiler replace for buildin compiler
- “Delphi\5.0” “BackgroundCompilation” – Google Search
- “Delphi\7.0” “BackgroundCompilation” – Google Search and “Delphi\6.0” “BackgroundCompilation” – Google Search
- [WayBack] Iterating IOTAEnvironmentOptions – Chee Wee’s blog: IT solutions for Singapore and companies worldwide
Too bad Google does not index the WayBack machine, as I think it contains relevant material that is now hard to find.
So it looks like the feature was introduced somewhere close to Delphi 5:
[HKEY_CURRENT_USER\Software\Borland\Delphi\5.0\Compiling] "Show Compiler Progress"="True" "Warn on Package Rebuild"="-1" "Compile Beep"="0" "Cache Headers"="0" "BackgroundCompilation"="0"
“Delphi” “Background Compilation” – Google Search shows much more information, based on what it returned I found that the first actual documentation was for Background Compilation in Delphi 2010, some 10 years after it became available:
- [WayBack] Background Compilation in Delphi 2010 and C++Builder 2010 | Andreano Lanusse | Technology and Software Development
- [WayBack] Compiling, Building, and Running Applications Index – RAD Studio (RAD Studio 2010):
- [WayBack] Background Compilation – RAD Studio (RAD Studio 2010)
- [WayBack] Compiling, Building, and Running Applications (RAD Studio 2009): no mentioning of Background
- [WayBack] Compiling, Building, and Running Applications (RAD Studio 2007): no mentioning of Background
The image in the blog post of former product manager Andreano Lanusse shows why I did not see the behaviour: when background compiling is active, the progress dialog is transparent (and non-modal). I did not have the compiler progress enabled, so never saw that dialog change behaviour.
–jeroen
Leave a comment