[Lldb-commits] [lldb] [lldb][doc] Improve documentation for `ScriptedFrameProvider` (PR #179996)
Adrian Vogelsgesang via lldb-commits
lldb-commits at lists.llvm.org
Thu Feb 5 10:10:42 PST 2026
https://github.com/vogelsgesang created https://github.com/llvm/llvm-project/pull/179996
* Provide a minimal, working example
* Document the instance variables
* Remove mention of `thread.SetScriptedFrameProvider` (which doesn't exist)
* add missing `@staticmethod` annotation
* fix rendering of bullet-pointed lists
>From 883280ef441136bf9c32bac887289d5d021ccae3 Mon Sep 17 00:00:00 2001
From: Adrian Vogelsgesang <avogelsgesang at salesforce.com>
Date: Thu, 5 Feb 2026 15:06:30 +0000
Subject: [PATCH] [lldb][doc] Improve documentation for `ScriptedFrameProvider`
---
.../templates/scripted_frame_provider.py | 40 ++++++++++++++++---
1 file changed, 34 insertions(+), 6 deletions(-)
diff --git a/lldb/examples/python/templates/scripted_frame_provider.py b/lldb/examples/python/templates/scripted_frame_provider.py
index a45ef9427a532..e5a7650b238f2 100644
--- a/lldb/examples/python/templates/scripted_frame_provider.py
+++ b/lldb/examples/python/templates/scripted_frame_provider.py
@@ -19,16 +19,41 @@ class ScriptedFrameProvider(metaclass=ABCMeta):
Most of the base class methods are `@abstractmethod` that need to be
overwritten by the inheriting class.
+ The constructor of this class sets up the following attributes:
+
+ - ``input_frames`` (lldb.SBFrameList or None): The frame list to use as input
+ - ``thread`` (lldb.SBThread or None): The thread this provider is attached to.
+ - ``target`` (lldb.SBTarget or None): The target from the thread's process.
+ - ``process`` (lldb.SBProcess or None): The process that owns the thread.
+ - ``args`` (lldb.SBStructuredData or None): Dictionary-like structured data passed when the provider was registered.
+
Example usage:
.. code-block:: python
- # Attach a frame provider to a thread
- thread = process.GetSelectedThread()
- error = thread.SetScriptedFrameProvider(
- "my_module.MyFrameProvider",
- lldb.SBStructuredData()
- )
+ import lldb
+ from lldb.plugins.scripted_frame_provider import ScriptedFrameProvider
+
+ class CoroFrameProvider(ScriptedFrameProvider):
+ def __init__(self, input_frames, args):
+ super().__init__(input_frames, args)
+
+ @staticmethod
+ def get_description():
+ return "C++ coroutine frame unwinding"
+
+ def get_frame_at_index(self, index):
+ # Duplicate every frame
+ return int(index / 2)
+
+ def __lldb_init_module(debugger, internal_dict):
+ debugger.HandleCommand(f"target frame-provider register -C {__name__}.CoroFrameProvider")
+
+ if __name__ == '__main__':
+ print("This script should be loaded from LLDB using `command script import <filename>`")
+
+ You can register your frame provider either via the CLI command ``target frame-provider register`` or
+ via the API ``SBThread.RegisterScriptedFrameProvider``.
"""
@staticmethod
@@ -74,6 +99,7 @@ def get_description():
.. code-block:: python
+ @staticmethod
def get_description(self):
return "Crash log frame provider for thread 1"
"""
@@ -150,10 +176,12 @@ def get_frame_at_index(self, index):
if no frame exists at this index. The dictionary should contain:
Required fields:
+
- idx (int): The synthetic frame index (0 for youngest/top frame)
- pc (int): The program counter address for the synthetic frame
Alternatively, you can return:
+
- A ScriptedFrame object for full control over frame behavior
- An integer representing an input frame index to reuse
- None to indicate no more frames exist
More information about the lldb-commits
mailing list