Of course, the Right Place to put the breakpoints is on the code *inside* the if/elsif/else - "right" being "you will actually stop somewhere near where you want to be".
I've noticed similar annoying behavior with for loops at times. Just set your breakpoints inside and the problem goes away.
This is the least intrusive solution; obviously, you can code to the debugger's limitations by doing things like
if ($cond1) {
...
}
else {
if ($cond2) {
...
}
else {
if ($cond3) {
..
}
}
}
and now you can break at every if. (That looks scarily like some of my old PL/1 programs...)