<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 27, 2015 at 3:01 PM, via lldb-dev <span dir="ltr"><<a href="mailto:lldb-dev@lists.llvm.org" target="_blank">lldb-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, Aug 27, 2015 at 05:05:23PM +0000, Zachary Turner via lldb-dev wrote:<br>
> Well I'm xfailing it for now, but this other method seems kind of hackish<br>
> to me because it means the inferior and the debugger have to coordinate<br>
> with each other, which means the test has to know about the executable and<br>
> the executable has to know about the test.  I'd rather remove one direction<br>
> of this coupling.<br>
><br>
> Eventually my plan is to introduce a test_util.a which all of the test<br>
> executables link against.  We can provide a platform-independent<br>
> wait_for_debugger_to_attach() method here that just does the right thing on<br>
> all platforms.  This way the tests can be written without having to do this<br>
> funny business :)<br>
<br>
</span>What about fixing lldb to prefer to debug via launch instead of attach depending on the platform???<br>
<br></blockquote><div><br></div><div>The largest section of code getting debugged in production on the Apple side is in attached scenarios (often by requirement), so reducing attach test coverage isn't something I think we'd want to do at least on Apple platforms.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I don't see how you could write a wait_for_debugger_to_attach() that would work reliably.<br></blockquote><div><br></div><div>What about building a helper method that we mandate main() call for attach-enabled tests, that loops in a known function and has an exit scenario that the debugger can control.  Then, on attach, we set a breakpoint on something (which can be shared out several different ways, either by variable address lookup if we have symbols, or could be added to the environment by the helper method, etc.)  Then the protocol becomes:</div><div><br></div><div>The lldb test would do something like this:</div><div>1. attach to process</div><div>2. collect breakpoint information, which may require the inferior to be running more if we attach before main has even fired.  No worries there, though.</div><div>3. set breakpoint at collected spot.</div><div>4. when synchronization breakpoint is hit, we now know we're in a good startup spot.</div><div><br></div><div>And if a test might be used both in an attach-synchronous mode and not attached at all, that helper method could be controlled (again perhaps by environment variable or something else) to skip doing the waiting step if it doesn't expect to get attached to by the debugger.</div><div><br></div><div>All that could be put behind helpers on the lldb test side to more or less hide all traces of it.  Test inferiors would need a call to a helper method that could be fully defined in a header to simplify getting that code brought in.</div><div> </div><div>That would eliminate races in attach tests by creating an agreed synchronization point.</div><div><br></div><div>-Todd</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">-Todd</div></div>
</div></div>