BTW, probably a given, but I'm doing this on Windows with a Windows executable.  So it could be something to do with that as well, but I'm not really familiar with how the unwinder works.<br><div><br></div><div>FWIW it never calls RegisterContext::CreateRegisterContextForFrameIndex with any index other than 0.</div><br><div class="gmail_quote">On Thu Jan 15 2015 at 3:56:52 PM Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Having some trouble unwinding when I'm broken inside of a CRT function.  Another caveat is that I don't have symbols for this CRT function.  So the problem could be anything from something I've done wrong on my side, to an issue when symbols aren't present, to something else.  Here is the source code of this program:</div><div><br></div><div><div>#include <stdio.h></div><div><br></div><div>int main (void)</div><div>{</div><div>  printf("This is line 1\n");</div><div>  printf("This is line 2\n");</div><div>  printf("This is line 3\n");</div><div>  return 1;</div><div>}</div></div><div><br></div><div>Here is the disassembly of main:</div><div><br></div><div><div>(lldb) disassemble -n main -F intel</div><div>   0x1235040 <main>: push   ebp</div><div>   0x1235041 <main+1>: mov    ebp, esp</div><div>   0x1235043 <main+3>: sub    esp, 0x14</div><div>   0x1235046 <main+6>: lea    eax, [0x1230040]</div><div>   0x123504c <main+12>: mov    dword ptr [ebp - 0x4], 0x0</div><div>   0x1235053 <main+19>: mov    dword ptr [esp], eax</div><div>   0x1235056 <main+22>: call   0x12350a1</div><div>   0x123505b <main+27>: lea    ecx, [0x1230050]</div><div>   (snipped for brevity)</div></div><div><br></div><div>(Using the argument to "call" as the breakpoint address)</div><div>(lldb) break set -a 0x12350a1</div><div>Breakpoint 3: address = 0x012350a1</div><div>(lldb) run</div><div>Process 17044 launching</div><div>(lldb) Process 17044 launched: 'd:\testexe\expr_test.exe' (i386)</div><div>(lldb) Process 17044 stopped</div><div>* thread #1: tid = 0x40ec, 0x012350a1 expr_test.exe, stop reason = breakpoint 3.1</div><div>    frame #0: 0x012350a1 expr_test.exe</div><div>-> 0x12350a1: pushl  $0xc</div><div>   0x12350a3: pushl  $0x1241000</div><div>   0x12350a8: calll  0x1235be0</div><div>   0x12350ad: xorl   %edi, %edi</div><div>(lldb) disassemble -b -F intel<br></div><div>-> 0x12350a1: 6a 0c           push   0xc</div><div>   0x12350a3: 68 00 10 24 01  push   0x1241000</div><div>   0x12350a8: e8 33 0b 00 00  call   0x1235be0</div><div>   0x12350ad: 33 ff           xor    edi, edi</div><div>   0x12350af: 89 7d e4        mov    dword ptr [ebp - 0x1c], edi</div><div>   0x12350b2: 33 c0           xor    eax, eax</div><div>   0x12350b4: 39 45 08        cmp    dword ptr [ebp + 0x8], eax</div><div>   0x12350b7: 0f 95 c0        setne  al</div><div>   0x12350ba: 85 c0           test   eax, eax</div><div>   0x12350bc: 75 15           jne    0x12350d3</div><div><br></div><div>Here's my register values:</div><div><div><div>(lldb) register read</div><div>General Purpose Registers:</div><div>       eax = 0x01230040</div><div>       ebx = 0x00000000</div><div>       ecx = 0x00000001</div><div>       edx = 0x00000000</div><div>       edi = 0x00000000</div><div>       esi = 0x00000000</div><div>       ebp = 0x00EAF920</div><div>       esp = 0x00EAF908</div><div>       eip = 0x012350A1</div><div>    eflags = 0b00000000000000000000001000010110</div></div><div><br></div><div>And using the value of esp to dump the stack (sorry, I don't know how to use the -f argument to format this more nicely), </div><div><br></div><div>(lldb) memory read 0x00EAF908</div><div>0x00eaf908: 5b 50 23 01 40 00 23 01 00 00 00 00 00 00 00 00  [P#.@.#.........</div><div>0x00eaf918: 28 f9 ea 00 00 00 00 00 68 f9 ea 00 4e 52 23 01  (.......h...NR#.</div><div><br></div></div><div>So the return address is 0x0123505b.  Cross-referencing this with the original disassembly of main(), it looks like this is the correct value.</div><div><br></div><div>So it seems like the Unwinder has all the information it needs, but yet I'm still only getting 1 frame.  Any suggestions how to dig into this?</div></blockquote></div>