Debuggers actually set breakpoints after the function prologue, but reliably identifying the prologue across compilers and optimisation levels is hard!
miniblog.
Related Posts
The author of rust-analyzer discussing how language features help or hinder fast IDEs.
If you allow `from m import *` you can't analyse files in isolation, and it's even harder in Rust.
Implementing interactive languages, and the tradeoffs of interpreters, JIT compilers, and AOT compilers:
Interpreters versus compilers as a spectrum, and a fun worked example of optimising Brainfuck: