You iterate over all the threads and ask each thread what its stop reason is.
> On Mar 18, 2016, at 4:25 PM, Jeffrey Tan via lldb-dev > <lldb-dev@lists.llvm.org> wrote: > > > Hmm, interesting, I got the stop reason from the > lldb.SBProcess.GetProcessFromEvent(event).GetSelectedThread().GetStopReason(). > Is that thread not the one that stopped? But you are right, the breakpoint > hits in another thread: > > thread #87: tid = 1006769, 0x000000000042eacd > biggrep_master_server_async`facebook::biggrep::BigGrepMasterAsync::future_find(this=0x00007f3ea2d74fd0, > corpus=error: summary string parsing error, needle=error: summary string > parsing error, options=0x00007f3e899fc7e0) + 51 at > BigGrepMasterAsync.cpp:171, name = 'BigGrep-pri3-32', stop reason = > breakpoint 1.1 > > How do I know which thread hits the breakpoint? > > Jeffrey > > > On Fri, Mar 18, 2016 at 4:12 PM, Jim Ingham <jing...@apple.com> wrote: > You only show one thread in your example. Did another thread have a valid > stop reason? lldb shouldn’t be stopping for no reason anywhere… > > Jim > >> On Mar 18, 2016, at 4:08 PM, Jeffrey Tan via lldb-dev >> <lldb-dev@lists.llvm.org> wrote: >> >> Btw: the breakpoint I set is: >> "b BigGrepMasterAsync.cpp:171" which is not in any of the stopped stack >> frames. >> >> On Fri, Mar 18, 2016 at 3:47 PM, Jeffrey Tan <jeffrey.fu...@gmail.com> wrote: >> Hi, >> >> Our IDE(wrapping lldb using python) works fine on Linux for simple hello >> world cases. While trying a real world case, I found whenever we set a >> source line breakpoint, then trigger the code path, lldb will send a stopped >> state process event, with thread.GetStopReason() being None and with weird >> callstack. Any ideas why do I get this stop stack(code is listed at the >> end)? I have verified that if I do not set breakpoint and trigger the same >> code path does not cause this stop event to generate. >> >> bt >> * thread #1: tid = 952490, 0x00007fd7cb2daa83 libc.so.6`__GI_epoll_wait + >> 51, name = 'biggrep_master_' >> * frame #0: 0x00007fd7cb2daa83 libc.so.6`__GI_epoll_wait + 51 >> frame #1: 0x000000000271189f >> biggrep_master_server_async`epoll_dispatch(base=0x00007fd7ca970800, >> arg=0x00007fd7ca62c1e0, tv=<unavailable>) + 127 at epoll.c:315 >> frame #2: 0x000000000270f6d1 >> biggrep_master_server_async`event_base_loop(base=0x00007fd7ca970800, >> flags=<unavailable>) + 225 at event.c:524 >> frame #3: 0x00000000025f9378 >> biggrep_master_server_async`folly::EventBase::loopBody(this=0x00007fd7ca945180, >> flags=0) + 834 at EventBase.cpp:335 >> frame #4: 0x00000000025f900b >> biggrep_master_server_async`folly::EventBase::loop(this=0x00007fd7ca945180) >> + 29 at EventBase.cpp:287 >> frame #5: 0x00000000025fa053 >> biggrep_master_server_async`folly::EventBase::loopForever(this=0x00007fd7ca945180) >> + 109 at EventBase.cpp:435 >> frame #6: 0x0000000001e24b72 >> biggrep_master_server_async`apache::thrift::ThriftServer::serve(this=0x00007fd7ca96d710) >> + 110 at ThriftServer.cpp:365 >> frame #7: 0x00000000004906bc >> biggrep_master_server_async`facebook::services::ServiceFramework::startFramework(this=0x00007ffc06776140, >> waitUntilStop=true) + 1942 at ServiceFramework.cpp:885 >> frame #8: 0x000000000048fe6d >> biggrep_master_server_async`facebook::services::ServiceFramework::go(this=0x00007ffc06776140, >> waitUntilStop=true) + 35 at ServiceFramework.cpp:775 >> frame #9: 0x00000000004219a7 biggrep_master_server_async`main(argc=1, >> argv=0x00007ffc067769d8) + 2306 at BigGrepMasterServerAsync.cpp:134 >> frame #10: 0x00007fd7cb1ed0f6 libc.so.6`__libc_start_main + 246 >> frame #11: 0x0000000000420bfc biggrep_master_server_async`_start + 41 at >> start.S:122 >> >> Here is the code snippet of handling code: >> def _handle_process_event(self, event): >> # Ignore non-stopping events. >> if lldb.SBProcess.GetRestartedFromEvent(event): >> log_debug('Non stopping event: %s' % str(event)) >> return >> >> process = lldb.SBProcess.GetProcessFromEvent(event) >> if process.state == lldb.eStateStopped: >> self._send_paused_notification(process) >> elif process.state == lldb.eStateExited: >> exit_message = 'Process(%d) exited with: %u' % ( >> process.GetProcessID(), >> process.GetExitStatus()) >> if process.GetExitDescription(): >> exit_message += (', ' + process.GetExitDescription()) >> self._send_user_output('log', exit_message) >> self.should_quit = True >> else: >> self._send_notification('Debugger.resumed', None) >> >> event_type = event.GetType() >> if event_type == lldb.SBProcess.eBroadcastBitSTDOUT: >> # Read stdout from inferior. >> process_output = '' >> while True: >> output_part = process.GetSTDOUT(1024) >> if not output_part or len(output_part) == 0: >> break >> process_output += output_part >> self._send_user_output('log', process_output) >> >> _______________________________________________ >> lldb-dev mailing list >> lldb-dev@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev > > > _______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev