IDE:
1. The project system, it is single target only. In order to do unit testing or other, I have to switch to other instances.
"Target" is misleading, as it is often used for cross compiling (and that can be managed within one project). I take you mean "single program".
While not exactly what you may be used to, try the package "LazProjectGroups".
Then you can add your
- main program
- test program
- ....
To the group => You can quickly change between them, or run them from the group (context menu).
If you test app is in the same folder as the main app then it does see the same units as the main app.
2. The project system, by its organisation is also surprisingly hard to manage. It somewhat penalises you for putting a class per file, and makes putting files into directories like "namespaces" more work than it should be
Not sure what you mean.
Namespaces is a language construct, so not sure what that has to do with the project organization. Other than that you may be used to organize your code in certain ways. (I know when I switch between languages (any languages) I do want to write code that does not match the style of the language I switched to)
Maybe you look for packages?
IDE/Debugger:
3. The single biggest issue in adoption of Lazarus is the debugger. I do respect that Pascal is low level, but with debugging the simplest of things gets very time consuming. Take e.g. a List of objects; in order to get to the detail you have to go look at memory as the list reflects pointers, while, even with full debugging, I get messsages like "Error: unknown data". I can name numerous other such cases.
Admittedly, a known problem...
Long history, and complex to solve (in terms of number of involved parties) => GDB/lldb don't know the concept of properties => so until the existence of FpDebug it wasn't happening (well, if someone had wanted to add it to gdb/lldb....).
Now, we have a proposal with the DWARF standard. Then the compiler needs to adapt it, and do a major release. And then the debugger can adapt it....
I know, not your problem what causes it. Just background info.
In some cases (and improved in Lazarus 4) you can call the getter function. (using FpDebug)
- Enable function calling in Tools > Options > debugger
- Enable function calling in the watch property (yes, needs a watch / does not work with hints)
- Add something like (the "()" are mandatory)
MyStringlist.Get(1);
MyStringlist.GetText();
Use Dwarf3 or strings may either not work, or cause leaks.
4. The IDE penalises you for using properties, as the backing property variable and property gets displayed twice when debugging.
How to reproduce?
See my example picture. Width is shown once.
5. Even common infrastructure to support the dumping of values here may help.
There is LazLogger (search wiki) with plenty of "dbgs()" to print many common types
debugln(['1:',dbgs(MyPoint), ' 2:', dbgs(MyRect)])
Lastly - and please don't fume (sorry) - but choose and promote a single formatter and style; and reformat all the packaged pascal with it. Age has told me that it is better to conform to a single "standard" rather than to fight the environment.
Has its pro and cons => I don't think it currently is likely to happen.