Now let's go to BuildsModes, what are they?
When compiling a project you are informing how you want the compilation, the Lazarus pattern is very basic and every time you compile it will add a debug weight to your project which will make it heavier and slower than it should be.
As an example, a basic application with 16 tables CRUD and 42 units with classes and forms is 56MB, not bad huh? But if we remove the debug, in addition to being faster and more agile, the final executable drops to 16MB!
This is the weight of the debug incorporated into the project and we are talking about a debug that is adjusted to be very basic, you can have an even bigger debug with some adjustments that give us even more information when debugging a program. So we need to have BuildsMode for each of our intentions, for example, basic debug to find routine failures that maybe show the line and the value of variables, a more complete debug that scans the return of functions/methods/properties and another that is to compile without debug none to deliver an optimized executable.
Go in Project->Project Options, then select the tab Compiler Options. You just found this configuration screen with Build modes called “Default”:

Let’s add one more, click “…”:

In the next window, in Build Mode “Default” click on “+” to create one more:

And give a meaningful name to what we're going to do now, let's call it “Chronic Debug”:

Now you will click OK and close the current window and return to where we were before, note at the top:

Build mode is set to “Chronic Debug”, whatever configuration we make will be under this name, so let's make some tweaks that will be under this build mode.
View the console of the running program: In Linux, it is quite common when running programs in the terminal to display messages indicating program behaviors that sometimes indicate problems, they may even not be fatal, for example, a font that your program uses and is not installed on the system and had to be replaced by another is an important clue as to “why” the program looks different than it does on other computers. I'm not convinced that enabling this option in the environment has the same effect as in Windows, I believe that in Windows there is no stdout of this type sent by the operating system.
But if it's on Linux, let's turn this option on when we compile a program under “Chronic Debug”.
Go to Compiler Options->Config and Target and turn off the option Win32 ui application:

Debug to debug: Go in Compiler Options and then in Compiling Linking and there you will find several debug levels, the default is “1” which is nice for most cases, but if we want a Chronic Debug so let's adjust it in Optimizations levels to 0 (zero):

- Verbosity: Indicate things that you would like the debugger to be proactive and indicate some problems before they even happen in the form of a warning. Go in Compiler Options and then in verbosity and there you will find a series of options, some are already marked, let's add show debug info:
These were the tweaks that helped me a lot, click OK.
Now when compiling a program with F9 or Ctrl+F9 you will be using the profile “Chronic Debug” every time, but when you need to change go to Project->Options and change the Build Mode for what you want to use:

Be smart now and create a Build Mode named “DebugOff” and turn off debug options, all of them. You will use this build mode when generating a final executable for the production line.
Final considerations: Build Mode is not just for compiling and debugging. Each build mode can be used for a different purpose, for example one of them to crosscompiler and generate programs for Linux, Windows, 32/64bits and still others using different compilation options that can even determine executables in different folders.