From abe6a660b9272cd14853f5e2ff7b789de60f4fb6 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Mon, 3 Nov 2014 17:40:42 +0100 Subject: [PATCH] lldb: step-over __select before execution in threads --- .../linux/lldb_threads_settrace.py | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py index 64b1b785bd20..7db51006bf66 100644 --- a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py +++ b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py @@ -27,15 +27,22 @@ def __lldb_init_module(debugger, internal_dict): if not thread.IsStopped(): # thread.Suspend() error = process.Stop() - frame = thread.GetSelectedFrame() - if frame: - print('Will settrace in: %s' % (frame,)) - res = frame.EvaluateExpression("(int) SetSysTraceFunc(%s, %s)" % ( - show_debug_info, is_debug), options) - error = res.GetError() - if error: - print(error) + frame = thread.GetSelectedFrame() + + if frame.GetFunctionName() == '__select': + # print('We are in __select') + # Step over select, otherwise evaluating expression there can terminate thread + thread.StepOver() + frame = thread.GetSelectedFrame() + + print('Will settrace in: %s' % (frame,)) + + res = frame.EvaluateExpression("(int) SetSysTraceFunc(%s, %s)" % ( + show_debug_info, is_debug), options) + error = res.GetError() + if error: + print(error) thread.Resume() except: