First of all, make sure your project does not have old or duplicate ppu or o files.
If you have include path (maybe mixed with packages...). So also check in any packages that you have.
Ideally remove all ppu files, and rebuild.
If you use external debug info, also remove the dbg file.
Then ensure, that there are no symlinks into your project/packages. I am not sure if it affects fpdebug...., or was only with gdb. But if you have symlinks, and your IDE knows a file as "/home/you/project_foo/unit.pas", yet the compiler (and also debugger) know it as "/home/you/project_foo_alias/unit.pas" then that can cause all sort of issues.
You say "only stop works" => what about the pause button? That should work too, it should pause and display the asm window.
When you run your app, does the editor show small blue dots in the gutter (where it also shows the breakpoints) in any of your units? (for at least some of the functions?)
Do you use "type TFoo = object" ? (old style)
or generics?
t compiles and runs (I think), that is, it just leaves me there, with the breakpoint still red(not grey, like when debugging)
Breakpoints shouldn't be grey, when debugging...
(breakpoints can be green, if you disable them)
It being "red" is good and correct. The important question is what symbol is show on the breakpoint.
? => this should only be on the breakpoint when your debugger is not running
X => this indicates the breakpoint could not be set
V (checkmark) => this means the breakpoint was activated for the debug session (This is what it should be, while debugging)
|| (pause symbol) => Not activated, the debugger did not find the unit in your app (usually if the code may be part of a library, not yet loaded)