[Lldb-commits] [lldb] r274822 - Add an API to unwind from a hand-called expression.

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Thu Jul 7 19:12:05 PDT 2016


Author: jingham
Date: Thu Jul  7 21:12:05 2016
New Revision: 274822

URL: http://llvm.org/viewvc/llvm-project?rev=274822&view=rev
Log:
Add an API to unwind from a hand-called expression.

This is just an SB API way of doing "thread return -x".
<rdar://problem/27110360>

Modified:
    lldb/trunk/include/lldb/API/SBThread.h
    lldb/trunk/scripts/interface/SBThread.i
    lldb/trunk/source/API/SBThread.cpp

Modified: lldb/trunk/include/lldb/API/SBThread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBThread.h?rev=274822&r1=274821&r2=274822&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBThread.h (original)
+++ lldb/trunk/include/lldb/API/SBThread.h Thu Jul  7 21:12:05 2016
@@ -150,6 +150,9 @@ public:
     SBError
     ReturnFromFrame (SBFrame &frame, SBValue &return_value);
 
+    SBError
+    UnwindInnermostExpression();
+
     //--------------------------------------------------------------------------
     /// LLDB currently supports process centric debugging which means when any
     /// thread in a process stops, all other threads are stopped. The Suspend()

Modified: lldb/trunk/scripts/interface/SBThread.i
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBThread.i?rev=274822&r1=274821&r2=274822&view=diff
==============================================================================
--- lldb/trunk/scripts/interface/SBThread.i (original)
+++ lldb/trunk/scripts/interface/SBThread.i Thu Jul  7 21:12:05 2016
@@ -259,6 +259,14 @@ public:
     SBError
     ReturnFromFrame (SBFrame &frame, SBValue &return_value);
 
+    %feature("autodoc", "
+    Unwind the stack frames from the innermost expression evaluation.
+    This API is equivalent to 'thread return -x'.
+    ") UnwindInnermostExpression;
+    
+    SBError
+    UnwindInnermostExpression();
+
     %feature("docstring", "
     //--------------------------------------------------------------------------
     /// LLDB currently supports process centric debugging which means when any

Modified: lldb/trunk/source/API/SBThread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBThread.cpp?rev=274822&r1=274821&r2=274822&view=diff
==============================================================================
--- lldb/trunk/source/API/SBThread.cpp (original)
+++ lldb/trunk/source/API/SBThread.cpp Thu Jul  7 21:12:05 2016
@@ -1249,6 +1249,31 @@ SBThread::ReturnFromFrame (SBFrame &fram
     return sb_error;
 }
 
+SBError
+SBThread::UnwindInnermostExpression()
+{
+    SBError sb_error;
+
+    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+    std::unique_lock<std::recursive_mutex> lock;
+    ExecutionContext exe_ctx(m_opaque_sp.get(), lock);
+
+    if (log)
+        log->Printf ("SBThread(%p)::UnwindExpressionEvaluation",
+                     static_cast<void*>(exe_ctx.GetThreadPtr()));
+
+    if (exe_ctx.HasThreadScope())
+    {
+        Thread *thread = exe_ctx.GetThreadPtr();
+        sb_error.SetError (thread->UnwindInnermostExpression());
+        if (sb_error.Success())
+            thread->SetSelectedFrameByIndex(0, false);
+    }
+
+    return sb_error;
+
+}
 
 bool
 SBThread::Suspend()




More information about the lldb-commits mailing list