<div dir="ltr">Ok crisis averted.  Part of why this thread dragged out for so long is because I kept thinking it did this all the way down and it seemed unnecessary and problematic to allow code arbitrarily deep on the stack to mess up unwinding.<br><div><br></div><div>Thanks.</div></div><br><div class="gmail_quote">On Tue, Mar 10, 2015 at 5:35 PM Greg Clayton <<a href="mailto:gclayton@apple.com">gclayton@apple.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
> On Mar 10, 2015, at 5:26 PM, Zachary Turner <<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>> wrote:<br>
><br>
> I'm going to be revisiting this soon, but one thing I was never clear about.<br>
><br>
> If I step over a function call, does it do this algorithm of single stepping a call instruction and then running until the next branch point _all the way down_, or does it only do it one level deep?  In other words, say I have this code<br>
><br>
> void baz() {<br>
>   printf("Test");<br>
> }<br>
><br>
> void bar() {<br>
>    baz();<br>
> }<br>
><br>
> void foo() {<br>
>    bar();<br>
> }<br>
><br>
> and I'm inside of foo(), and I want to step over bar.  It will single step the call, end up inside of bar.  Then run to the next branch point.  Does it now single step baz, end up in baz, run to next branch point, and then single step printf, and then continue this all the way down?  Or once it figures out where it is inside of bar, that's sufficient to let it run until the return address?<br>
<br>
The latter. It will stop at the first instruction of "bar()" and then set a BP on the return address and continue to it, then continue with the source level single step over you started with (if there are any instructions left after the return BP is hit.<br>
<br>
</blockquote></div>