Some (not all) of the developers (both fpc and Lazarus) are here on the Forum..
Other ways to reach out are the mailing list. (See forum menu on the left)
In the forum it's a matter of which board and the right Subject. I.e. "Compiler generated line info" vs "step over".
"step over" usually will attract me. Because it refers to the debugger site of things.
I admit it's hard to know what to ask for. Some topics (like the debugger) are complex that way, because internally the split into many different areas of responsibility. In the IDE they are (as much as possible) integrated as a single entity.
In general, debugging is line based (that contradicts the statement based Pascal a little). It would in theory be possible to change this, but in practice I can't see that happen anytime soon.
So that means "step over" will go line by line. Never statement by statement.
But that does not mean that a procedure's begin line should be entered more than once. (Or I have even found that the local "var" line is entered.
-O- / no optimization
I have made no direct comparison myself. And even with no optimizations, the described issues do happen.
I do not know if the degree to which they happen would change. (In case you use -O1)
Actually the multi param procedure call, ideally it should go (params are evaluated backwards)
foo( // // stop this line 4th
arg1, // stop this line third
arg2, // stop this line second
arg3 // stop this line first
); // never stop here
But well...
The "begin" line of the procedure has another issue. Its called a "proloque" and during it's execution the program creates the space for local vars. That means when you are (the first time) at the start of the "begin" local vars do not exist yet.
Anything that the debugger tries to access when showing locals is invalid memory. (usually the debugger deals with this).
a) The compiler forgets to tell the debugger:
https://bugs.freepascal.org/view.php?id=34995b) if the compiler did tell the debugger, some debuggers (not all) could skip that line. (you never need to step to "begin" of procedure.) / Note that if the compiler added that, the debugger would still need to learn about it too.
Anyway that last bit are internals, that you do not need to know. I just thought to get you an insight into the fun behind the scenes.