In my experience, such behavior is related to the fact that you are line-stepping through C-code, and you are hitting an area where code has been optimized such that a direct mapping between binary code executed and your source code, does no longer exist.
What you usually can do is, once you hit the first breakpoint, continue stepping through assembler i.s.o. C code. It's painfully slow, but may help you understand what is happening.
Changing variables used in the code fragment into global i.s.o. local may help, in that code optimization is more restricted. With some luck the C-code you are trying to single step is not optimized away.
Or you can play with compiler directives, and not optimize the code segment you are debugging.
Either way, it requires trial and error, and patience. Good luck!