LLDB mainline
ScriptedFrame.h
Go to the documentation of this file.
1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_FRAME_H
10#define LLDB_SOURCE_PLUGINS_SCRIPTED_FRAME_H
11
12#include "ScriptedThread.h"
15#include "lldb/lldb-forward.h"
16#include "llvm/Support/Error.h"
17#include <memory>
18#include <string>
19
20namespace lldb_private {
21
23
24public:
28 SymbolContext &sym_ctx, lldb::RegisterContextSP reg_ctx_sp,
29 StructuredData::GenericSP script_object_sp = nullptr);
30
31 ~ScriptedFrame() override;
32
33 /// Create a ScriptedFrame from a object instanciated in the script
34 /// interpreter.
35 ///
36 /// \param[in] thread_sp
37 /// The thread this frame belongs to.
38 ///
39 /// \param[in] scripted_thread_interface_sp
40 /// The scripted thread interface (needed for ScriptedThread
41 /// compatibility). Can be nullptr for frames on real threads.
42 ///
43 /// \param[in] args_sp
44 /// Arguments to pass to the frame creation.
45 ///
46 /// \param[in] script_object
47 /// The optional script object representing this frame.
48 ///
49 /// \return
50 /// An Expected containing the ScriptedFrame shared pointer if successful,
51 /// otherwise an error.
52 static llvm::Expected<std::shared_ptr<ScriptedFrame>>
53 Create(lldb::ThreadSP thread_sp,
54 lldb::ScriptedThreadInterfaceSP scripted_thread_interface_sp,
56 StructuredData::Generic *script_object = nullptr);
57
58 bool IsInlined() override;
59 bool IsArtificial() const override;
60 bool IsHidden() override;
61 const char *GetFunctionName() override;
62 const char *GetDisplayFunctionName() override;
63
65
66 VariableList *GetVariableList(bool get_file_globals,
67 lldb_private::Status *error_ptr) override;
68
70 GetInScopeVariableList(bool get_file_globals,
71 bool must_have_valid_location = false) override;
72
75 lldb::DynamicValueType use_dynamic) override;
76
78 llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic,
79 uint32_t options, lldb::VariableSP &var_sp, Status &error) override;
80
81 bool isA(const void *ClassID) const override {
82 return ClassID == &ID || StackFrame::isA(ClassID);
83 }
84 static bool classof(const StackFrame *obj) { return obj->isA(&ID); }
85
86private:
89 static llvm::Expected<lldb::RegisterContextSP>
91 lldb::user_id_t frame_id);
92
93 // Populate m_variable_list_sp from the scripted frame interface. Right now
94 // this doesn't take any options because the implementation can't really do
95 // anything with those options anyway, so there's no point.
97
98 ScriptedFrame(const ScriptedFrame &) = delete;
99 const ScriptedFrame &operator=(const ScriptedFrame &) = delete;
100
101 std::shared_ptr<DynamicRegisterInfo> GetDynamicRegisterInfo();
102
106
107 static char ID;
108};
109
110} // namespace lldb_private
111
112#endif // LLDB_SOURCE_PLUGINS_SCRIPTED_FRAME_H
static llvm::raw_ostream & error(Stream &strm)
lldb::VariableListSP m_variable_list_sp
static llvm::Expected< std::shared_ptr< ScriptedFrame > > Create(lldb::ThreadSP thread_sp, lldb::ScriptedThreadInterfaceSP scripted_thread_interface_sp, StructuredData::DictionarySP args_sp, StructuredData::Generic *script_object=nullptr)
Create a ScriptedFrame from a object instanciated in the script interpreter.
bool IsArtificial() const override
Query whether this frame is artificial (e.g a synthesized result of inferring missing tail call frame...
const char * GetFunctionName() override
Get the frame's demangled name.
bool isA(const void *ClassID) const override
VariableList * GetVariableList(bool get_file_globals, lldb_private::Status *error_ptr) override
Retrieve the list of variables whose scope either:
lldb::ScriptedFrameInterfaceSP GetInterface() const
lldb::VariableListSP GetInScopeVariableList(bool get_file_globals, bool must_have_valid_location=false) override
Retrieve the list of variables that are in scope at this StackFrame's pc.
void CheckInterpreterAndScriptObject() const
lldb::ScriptedFrameInterfaceSP m_scripted_frame_interface_sp
lldb::ValueObjectSP GetValueForVariableExpressionPath(llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic, uint32_t options, lldb::VariableSP &var_sp, Status &error) override
Create a ValueObject for a variable name / pathname, possibly including simple dereference/child sele...
static llvm::Expected< lldb::RegisterContextSP > CreateRegisterContext(ScriptedFrameInterface &interface, Thread &thread, lldb::user_id_t frame_id)
ScriptedFrame(lldb::ThreadSP thread_sp, lldb::ScriptedFrameInterfaceSP interface_sp, lldb::user_id_t frame_idx, lldb::addr_t pc, SymbolContext &sym_ctx, lldb::RegisterContextSP reg_ctx_sp, StructuredData::GenericSP script_object_sp=nullptr)
ScriptedFrame(const ScriptedFrame &)=delete
const ScriptedFrame & operator=(const ScriptedFrame &)=delete
lldb_private::StructuredData::GenericSP m_script_object_sp
lldb::RegisterContextSP GetRegisterContext() override
Get the RegisterContext for this frame, if possible.
bool IsHidden() override
Query whether this frame should be hidden from backtraces.
bool IsInlined() override
Query whether this frame is a concrete frame on the call stack, or if it is an inlined frame derived ...
static bool classof(const StackFrame *obj)
const char * GetDisplayFunctionName() override
Get the frame's demangled display name.
lldb::ValueObjectSP GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic) override
Create a ValueObject for a given Variable in this StackFrame.
std::shared_ptr< DynamicRegisterInfo > GetDynamicRegisterInfo()
This base class provides an interface to stack frames.
Definition StackFrame.h:44
StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx, lldb::user_id_t concrete_frame_idx, lldb::addr_t cfa, bool cfa_is_valid, lldb::addr_t pc, Kind frame_kind, bool artificial, bool behaves_like_zeroth_frame, const SymbolContext *sc_ptr)
Construct a StackFrame object without supplying a RegisterContextSP.
virtual bool isA(const void *ClassID) const
Definition StackFrame.h:49
An error handling class.
Definition Status.h:118
std::shared_ptr< Generic > GenericSP
std::shared_ptr< Dictionary > DictionarySP
Defines a symbol context baton that can be handed other debug core functions.
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::Thread > ThreadSP
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP
std::shared_ptr< lldb_private::ScriptedThreadInterface > ScriptedThreadInterfaceSP
std::shared_ptr< lldb_private::VariableList > VariableListSP
std::shared_ptr< lldb_private::Variable > VariableSP
uint64_t user_id_t
Definition lldb-types.h:82
uint64_t addr_t
Definition lldb-types.h:80
std::shared_ptr< lldb_private::RegisterContext > RegisterContextSP
std::shared_ptr< lldb_private::ScriptedFrameInterface > ScriptedFrameInterfaceSP