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 bool isA(const void *ClassID) const override {
67 return ClassID == &ID || StackFrame::isA(ClassID);
68 }
69 static bool classof(const StackFrame *obj) { return obj->isA(&ID); }
70
71private:
74 static llvm::Expected<lldb::RegisterContextSP>
76 lldb::user_id_t frame_id);
77
78 ScriptedFrame(const ScriptedFrame &) = delete;
79 const ScriptedFrame &operator=(const ScriptedFrame &) = delete;
80
81 std::shared_ptr<DynamicRegisterInfo> GetDynamicRegisterInfo();
82
85
86 static char ID;
87};
88
89} // namespace lldb_private
90
91#endif // LLDB_SOURCE_PLUGINS_SCRIPTED_FRAME_H
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
lldb::ScriptedFrameInterfaceSP GetInterface() const
void CheckInterpreterAndScriptObject() const
lldb::ScriptedFrameInterfaceSP m_scripted_frame_interface_sp
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.
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
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::ScriptedThreadInterface > ScriptedThreadInterfaceSP
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