[Lldb-commits] [lldb] a4197e4 - Add docs describing how the thread plan stack affects stepping (#110167)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Sep 27 09:36:57 PDT 2024
Author: jimingham
Date: 2024-09-27T09:36:52-07:00
New Revision: a4197e472823f51075c837f709da05a55ebc16d0
URL: https://github.com/llvm/llvm-project/commit/a4197e472823f51075c837f709da05a55ebc16d0
DIFF: https://github.com/llvm/llvm-project/commit/a4197e472823f51075c837f709da05a55ebc16d0.diff
LOG: Add docs describing how the thread plan stack affects stepping (#110167)
This is a convenient little feature of lldb, but if you didn't know it
was there you'd likely never discover it.
Added:
Modified:
lldb/docs/use/tutorial.rst
Removed:
################################################################################
diff --git a/lldb/docs/use/tutorial.rst b/lldb/docs/use/tutorial.rst
index 00e7befdd087a4..76e8ac4aeab89c 100644
--- a/lldb/docs/use/tutorial.rst
+++ b/lldb/docs/use/tutorial.rst
@@ -536,6 +536,43 @@ This command will run the thread in the current frame until it reaches line 100
in this frame or stops if it leaves the current frame. This is a pretty close
equivalent to GDB's ``until`` command.
+One other useful thing to note about the lldb stepping commands is that they
+are implemented as a stack of interruptible operations. Until the operation -
+e.g. step to the next line - is completed, it will remain on the
+stack. If the step over is interrupted and control returned to you,
+any new stepping commands you issue won't replace the step-over, but instead
+their operations will be pushed onto the stack after the original step over.
+Then each of them will be retired as they are completed, finally returning to the
+original step over operation.
+
+Suppose, for instance, you ``step-over`` a source line with a function call.
+If there is a breakpoint in that function, hitting the breakpoint will interrupt
+the step over. At that point, you will likely want to examine the state at
+the breakpoint, maybe stepping around in that frame, or stepping into other
+functions, running some expressions, etc.
+
+Because the original step-over has remained on the stack, when you've finished
+your examinations, a simple ``continue`` will resume the original ``step-over``
+operation, and you will arrive at the end of your starting source line in the
+original frame.
+
+This saves you from having to keep track of your original intention, and manually
+issuing the requisite number of ``step-out`` commands to get back to the frame
+you were stepping over. The stack maintains that information for you.
+
+Hand-called functions using the ``expr`` command are also implemented by
+operations on this same stack. So if you are calling some code with the ``expr`` command,
+and hit a breakpoint during the evaluation of that code, you can examine
+the state where you stopped, and when you're satisfied, issue a
+``continue`` to finish the expression evaluation operation and print the function
+result.
+
+You can examine the state of the operations stack using the ``thread plan list``
+command, and if, for instance, you decide you don't actually want that outermost
+next to continue running, you can remove it with the ``thread plan discard``
+command. If you are interested in following this process in more detail, the
+``lldb step`` logging channel is useful source of information.
+
A process, by default, will share the LLDB terminal with the inferior process.
When in this mode, much like when debugging with GDB, when the process is
running anything you type will go to the ``STDIN`` of the inferior process. To
More information about the lldb-commits
mailing list