<div dir="ltr">Thanks for the clarification. It makes sense.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 12, 2015 at 7:11 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On May 11, 2015, at 8:50 AM, Tamas Berghammer <<a href="mailto:tberghammer@google.com">tberghammer@google.com</a>> wrote:<br>
><br>
</span><div><div class="h5">> Hi All,<br>
><br>
> What is the expected behavior of SBFrame::GetFunctionName() in case of an inlined function (or possibly more nested inlined function)? Should it return the name of the deepest inlined function, the name of the outer most (non inlined) function or some combination of these two?<br>
><br>
> If I understand correctly, currently it returns the name of the deepest inlined function for the actual frame but TestNoreturnUnwind expect the name of the outer most (non inlined) function.<br>
<br>
</div></div>No, each SBFrame represents and exact scope for the current stack frame. Lets say you have the following code in "main.c":<br>
<br>
<br>
     1  static inline inlined1()<br>
     2  {<br>
     3      if (...)<br>
     4      {<br>
     5          puts("inlined1");<br>
     6      }<br>
     7  }<br>
     8<br>
     9  static inline inlined2()<br>
    10  {<br>
    11      if (...)<br>
    12      {<br>
    13         puts("inlined2");<br>
    14         inlined1();<br>
    15      }<br>
    16  }<br>
    17<br>
    18  static inline inlined3()<br>
    19  {<br>
    20      if (...)<br>
    21      {<br>
    22          puts("inlined3");<br>
    23          inlined2()<br>
    24      }<br>
    25  }<br>
    26<br>
    27  int main()<br>
    28  {<br>
    29      if (...)<br>
    30      {<br>
    31          inlined3();<br>
    32      }<br>
    33  }<br>
<br>
If you set a breakpoint at on line 5 and run. If everything got inlined, you will have 4 frames:<br>
<br>
frame = thread.GetFrameAtIndex(0);<br>
frame.GetBlock() would return the the lexical from line 4's if statement<br>
frame.GetFunctionName() would return "inlined1"<br>
frame.GetFunction() would return "int main()"<br>
frame.GetLineEntry() would return main.c:5<br>
frame.GetFrameBlock() would return the SBBlock that represents the lexical block from line 2 for the inlined1 inlined function<br>
<br>
frame = thread.GetFrameAtIndex(1);<br>
frame.GetBlock() would return the the lexical from line 12's if statement<br>
frame.GetFunctionName() would return "inlined2"<br>
frame.GetFunction() would return "int main()"<br>
frame.GetLineEntry() would return main.c:14<br>
frame.GetFrameBlock() would return the SBBlock that represents the lexical block from line 10 for the inlined2 inlined function<br>
<br>
frame = thread.GetFrameAtIndex(2);<br>
frame.GetBlock() would return the the lexical from line 20's if statement<br>
frame.GetFunctionName() would return "inlined3"<br>
frame.GetFunction() would return "int main()"<br>
frame.GetLineEntry() would return main.c:23<br>
frame.GetFrameBlock() would return the SBBlock that represents the lexical block from line 19 for the inlined2 inlined function<br>
<br>
frame = thread.GetFrameAtIndex(3);<br>
frame.GetBlock() would return the the lexical from line 30's if statement<br>
frame.GetFunctionName() would return "main"<br>
frame.GetFunction() would return "int main()"<br>
frame.GetLineEntry() would return main.c:31<br>
frame.GetFrameBlock() would return the SBBlock that represents the lexical block from line 28 for the main function<br>
<br>
So the SBFrame::GetFunctionName() will return the name of the first inlined function block above the SBFrame's block (frame.GetBlock()) if there is one, else it will return the name of the function.<br>
<br>
So the important distinction is that a SBFrame doesn't always represent the deepest block since with inlined stack frames we might have multiple inlined functions in the same SBFunction. Each SBFrame would be represented by a separate object with a different block scope.<br>
<br>
Does that make sense?<br>
<span class="HOEnZb"><font color="#888888"><br>
Greg<br>
<br>
<br>
</font></span></blockquote></div><br></div>