The problem with those types of breakpoints is that they slow down the app considerably.
Put one of those in a tight loop and the timing related bug you're after could be gone.
Only if they are implemented inefficiently or your application is constrained in a way that precludes efficient implementation.
As long as you can inject code and steal some memory you can just directly patch in the code snippet and patch in a branch instead of a breakpoint instruction. This is functionally equivalent to a adding a print statement, just at runtime instead of compile time, so should not be significantly slower.
As long as you can inject code and steal some memory you can just directly patch in the code snippet and patch in a branch instead of a breakpoint instruction. This is functionally equivalent to a adding a print statement, just at runtime instead of compile time, so should not be significantly slower.