LLDB mainline
StackFrame.h
Go to the documentation of this file.
1//===-- StackFrame.h --------------------------------------------*- C++ -*-===//
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_TARGET_STACKFRAME_H
10#define LLDB_TARGET_STACKFRAME_H
11
12#include <memory>
13#include <mutex>
14
15#include "lldb/Utility/Flags.h"
16
20#include "lldb/Target/StackID.h"
21#include "lldb/Utility/Scalar.h"
22#include "lldb/Utility/Status.h"
24#include "lldb/Utility/UserID.h"
25
26namespace lldb_private {
27
28/// \class StackFrame StackFrame.h "lldb/Target/StackFrame.h"
29///
30/// This base class provides an interface to stack frames.
31///
32/// StackFrames may have a Canonical Frame Address (CFA) or not.
33/// A frame may have a plain pc value or it may indicate a specific point in
34/// the debug session so the correct section load list is used for
35/// symbolication.
36///
37/// Local variables may be available, or not. A register context may be
38/// available, or not.
39
41 public std::enable_shared_from_this<StackFrame> {
42public:
50 };
51
52 enum class Kind {
53 /// A regular stack frame with access to registers and local variables.
54 Regular,
55
56 /// A historical stack frame -- possibly without CFA or registers or
57 /// local variables.
58 History,
59
60 /// An artificial stack frame (e.g. a synthesized result of inferring
61 /// missing tail call frames from a backtrace) with limited support for
62 /// local variables.
64 };
65
66 /// Construct a StackFrame object without supplying a RegisterContextSP.
67 ///
68 /// This is the one constructor that doesn't take a RegisterContext
69 /// parameter. This ctor may be called when creating a history StackFrame;
70 /// these are used if we've collected a stack trace of pc addresses at some
71 /// point in the past. We may only have pc values. We may have a CFA,
72 /// or more likely, we won't.
73 ///
74 /// \param [in] thread_sp
75 /// The Thread that this frame belongs to.
76 ///
77 /// \param [in] frame_idx
78 /// This StackFrame's frame index number in the Thread. If inlined stack
79 /// frames are being created, this may differ from the concrete_frame_idx
80 /// which is the frame index without any inlined stack frames.
81 ///
82 /// \param [in] concrete_frame_idx
83 /// The StackFrame's frame index number in the Thread without any inlined
84 /// stack frames being included in the index.
85 ///
86 /// \param [in] cfa
87 /// The Canonical Frame Address (this terminology from DWARF) for this
88 /// stack frame. The CFA for a stack frame does not change over the
89 /// span of the stack frame's existence. It is often the value of the
90 /// caller's stack pointer before the call instruction into this frame's
91 /// function. It is usually not the same as the frame pointer register's
92 /// value.
93 ///
94 /// \param [in] cfa_is_valid
95 /// A history stack frame may not have a CFA value collected. We want to
96 /// distinguish between "no CFA available" and a CFA of
97 /// LLDB_INVALID_ADDRESS.
98 ///
99 /// \param [in] pc
100 /// The current pc value of this stack frame.
101 ///
102 /// \param [in] sc_ptr
103 /// Optionally seed the StackFrame with the SymbolContext information that
104 /// has
105 /// already been discovered.
106 StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
107 lldb::user_id_t concrete_frame_idx, lldb::addr_t cfa,
108 bool cfa_is_valid, lldb::addr_t pc, Kind frame_kind,
109 bool behaves_like_zeroth_frame, const SymbolContext *sc_ptr);
110
111 StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
112 lldb::user_id_t concrete_frame_idx,
113 const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa,
114 lldb::addr_t pc, bool behaves_like_zeroth_frame,
115 const SymbolContext *sc_ptr);
116
117 StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
118 lldb::user_id_t concrete_frame_idx,
119 const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa,
120 const Address &pc, bool behaves_like_zeroth_frame,
121 const SymbolContext *sc_ptr);
122
123 ~StackFrame() override;
124
125 lldb::ThreadSP GetThread() const { return m_thread_wp.lock(); }
126
128
129 /// Get an Address for the current pc value in this StackFrame.
130 ///
131 /// May not be the same as the actual PC value for inlined stack frames.
132 ///
133 /// \return
134 /// The Address object set to the current PC value.
136
137 /// Get the current code Address suitable for symbolication,
138 /// may not be the same as GetFrameCodeAddress().
139 ///
140 /// For a frame in the middle of the stack, the return-pc is the
141 /// current code address, but for symbolication purposes the
142 /// return address after a noreturn call may point to the next
143 /// function, a DWARF location list entry that is a completely
144 /// different code path, or the wrong source line.
145 ///
146 /// The address returned should be used for symbolication (source line,
147 /// block, function, DWARF location entry selection) but should NOT
148 /// be shown to the user. It may not point to an actual instruction
149 /// boundary.
150 ///
151 /// \return
152 /// The Address object set to the current PC value.
154
155 /// Change the pc value for a given thread.
156 ///
157 /// Change the current pc value for the frame on this thread.
158 ///
159 /// \param[in] pc
160 /// The load address that the pc will be set to.
161 ///
162 /// \return
163 /// true if the pc was changed. false if this failed -- possibly
164 /// because this frame is not a live StackFrame.
166
167 /// Provide a SymbolContext for this StackFrame's current pc value.
168 ///
169 /// The StackFrame maintains this SymbolContext and adds additional
170 /// information to it on an as-needed basis. This helps to avoid different
171 /// functions looking up symbolic information for a given pc value multiple
172 /// times.
173 ///
174 /// \param [in] resolve_scope
175 /// Flags from the SymbolContextItem enumerated type which specify what
176 /// type of symbol context is needed by this caller.
177 ///
178 /// \return
179 /// A SymbolContext reference which includes the types of information
180 /// requested by resolve_scope, if they are available.
181 const SymbolContext &GetSymbolContext(lldb::SymbolContextItem resolve_scope);
182
183 /// Return the Canonical Frame Address (DWARF term) for this frame.
184 ///
185 /// The CFA is typically the value of the stack pointer register before the
186 /// call invocation is made. It will not change during the lifetime of a
187 /// stack frame. It is often not the same thing as the frame pointer
188 /// register value.
189 ///
190 /// Live StackFrames will always have a CFA but other types of frames may
191 /// not be able to supply one.
192 ///
193 /// \param [out] value
194 /// The address of the CFA for this frame, if available.
195 ///
196 /// \param [out] error_ptr
197 /// If there is an error determining the CFA address, this may contain a
198 /// string explaining the failure.
199 ///
200 /// \return
201 /// Returns true if the CFA value was successfully set in value. Some
202 /// frames may be unable to provide this value; they will return false.
203 bool GetFrameBaseValue(Scalar &value, Status *error_ptr);
204
205 /// Get the DWARFExpressionList corresponding to the Canonical Frame Address.
206 ///
207 /// Often a register (bp), but sometimes a register + offset.
208 ///
209 /// \param [out] error_ptr
210 /// If there is an error determining the CFA address, this may contain a
211 /// string explaining the failure.
212 ///
213 /// \return
214 /// Returns the corresponding DWARF expression, or NULL.
216
217 /// Get the current lexical scope block for this StackFrame, if possible.
218 ///
219 /// If debug information is available for this stack frame, return a pointer
220 /// to the innermost lexical Block that the frame is currently executing.
221 ///
222 /// \return
223 /// A pointer to the current Block. nullptr is returned if this can
224 /// not be provided.
226
227 /// Get the RegisterContext for this frame, if possible.
228 ///
229 /// Returns a shared pointer to the RegisterContext for this stack frame.
230 /// Only a live StackFrame object will be able to return a RegisterContext -
231 /// callers must be prepared for an empty shared pointer being returned.
232 ///
233 /// Even a live StackFrame RegisterContext may not be able to provide all
234 /// registers. Only the currently executing frame (frame 0) can reliably
235 /// provide every register in the register context.
236 ///
237 /// \return
238 /// The RegisterContext shared point for this frame.
240
242 return m_reg_context_sp;
243 }
244
245 /// Retrieve the list of variables that are in scope at this StackFrame's
246 /// pc.
247 ///
248 /// A frame that is not live may return an empty VariableList for a given
249 /// pc value even though variables would be available at this point if it
250 /// were a live stack frame.
251 ///
252 /// \param[in] get_file_globals
253 /// Whether to also retrieve compilation-unit scoped variables
254 /// that are visible to the entire compilation unit (e.g. file
255 /// static in C, globals that are homed in this CU).
256 ///
257 /// \param [out] error_ptr
258 /// If there is an error in the debug information that prevents variables
259 /// from being fetched. \see SymbolFile::GetFrameVariableError() for full
260 /// details.
261 ///
262 /// \return
263 /// A pointer to a list of variables.
264 VariableList *GetVariableList(bool get_file_globals, Status *error_ptr);
265
266 /// Retrieve the list of variables that are in scope at this StackFrame's
267 /// pc.
268 ///
269 /// A frame that is not live may return an empty VariableListSP for a
270 /// given pc value even though variables would be available at this point if
271 /// it were a live stack frame.
272 ///
273 /// \param[in] get_file_globals
274 /// Whether to also retrieve compilation-unit scoped variables
275 /// that are visible to the entire compilation unit (e.g. file
276 /// static in C, globals that are homed in this CU).
277 ///
278 /// \return
279 /// A pointer to a list of variables.
281 GetInScopeVariableList(bool get_file_globals,
282 bool must_have_valid_location = false);
283
284 /// Create a ValueObject for a variable name / pathname, possibly including
285 /// simple dereference/child selection syntax.
286 ///
287 /// \param[in] var_expr
288 /// The string specifying a variable to base the VariableObject off
289 /// of.
290 ///
291 /// \param[in] use_dynamic
292 /// Whether the correct dynamic type of an object pointer should be
293 /// determined before creating the object, or if the static type is
294 /// sufficient. One of the DynamicValueType enumerated values.
295 ///
296 /// \param[in] options
297 /// An unsigned integer of flags, values from
298 /// StackFrame::ExpressionPathOption
299 /// enum.
300 /// \param[in] var_sp
301 /// A VariableSP that will be set to the variable described in the
302 /// var_expr path.
303 ///
304 /// \param[in] error
305 /// Record any errors encountered while evaluating var_expr.
306 ///
307 /// \return
308 /// A shared pointer to the ValueObject described by var_expr.
310 llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic,
311 uint32_t options, lldb::VariableSP &var_sp, Status &error);
312
313 /// Determine whether this StackFrame has debug information available or not.
314 ///
315 /// \return
316 /// true if debug information is available for this frame (function,
317 /// compilation unit, block, etc.)
318 bool HasDebugInformation();
319
320 /// Return the disassembly for the instructions of this StackFrame's
321 /// function as a single C string.
322 ///
323 /// \return
324 /// C string with the assembly instructions for this function.
325 const char *Disassemble();
326
327 /// Print a description for this frame using the frame-format formatter
328 /// settings.
329 ///
330 /// \param [in] strm
331 /// The Stream to print the description to.
332 ///
333 /// \param [in] show_unique
334 /// Whether to print the function arguments or not for backtrace unique.
335 ///
336 /// \param [in] frame_marker
337 /// Optional string that will be prepended to the frame output description.
338 void DumpUsingSettingsFormat(Stream *strm, bool show_unique = false,
339 const char *frame_marker = nullptr);
340
341 /// Print a description for this frame using a default format.
342 ///
343 /// \param [in] strm
344 /// The Stream to print the description to.
345 ///
346 /// \param [in] show_frame_index
347 /// Whether to print the frame number or not.
348 ///
349 /// \param [in] show_fullpaths
350 /// Whether to print the full source paths or just the file base name.
351 void Dump(Stream *strm, bool show_frame_index, bool show_fullpaths);
352
353 /// Print a description of this stack frame and/or the source
354 /// context/assembly for this stack frame.
355 ///
356 /// \param[in] strm
357 /// The Stream to send the output to.
358 ///
359 /// \param[in] show_frame_info
360 /// If true, print the frame info by calling DumpUsingSettingsFormat().
361 ///
362 /// \param[in] show_source
363 /// If true, print source or disassembly as per the user's settings.
364 ///
365 /// \param[in] show_unique
366 /// If true, print using backtrace unique style, without function
367 /// arguments as per the user's settings.
368 ///
369 /// \param[in] frame_marker
370 /// Passed to DumpUsingSettingsFormat() for the frame info printing.
371 ///
372 /// \return
373 /// Returns true if successful.
374 bool GetStatus(Stream &strm, bool show_frame_info, bool show_source,
375 bool show_unique = false, const char *frame_marker = nullptr);
376
377 /// Query whether this frame is a concrete frame on the call stack, or if it
378 /// is an inlined frame derived from the debug information and presented by
379 /// the debugger.
380 ///
381 /// \return
382 /// true if this is an inlined frame.
383 bool IsInlined();
384
385 /// Query whether this frame is part of a historical backtrace.
386 bool IsHistorical() const;
387
388 /// Query whether this frame is artificial (e.g a synthesized result of
389 /// inferring missing tail call frames from a backtrace). Artificial frames
390 /// may have limited support for inspecting variables.
391 bool IsArtificial() const;
392
393 /// Query this frame to find what frame it is in this Thread's
394 /// StackFrameList.
395 ///
396 /// \return
397 /// StackFrame index 0 indicates the currently-executing function. Inline
398 /// frames are included in this frame index count.
399 uint32_t GetFrameIndex() const;
400
401 /// Set this frame's synthetic frame index.
402 void SetFrameIndex(uint32_t index) { m_frame_index = index; }
403
404 /// Query this frame to find what frame it is in this Thread's
405 /// StackFrameList, not counting inlined frames.
406 ///
407 /// \return
408 /// StackFrame index 0 indicates the currently-executing function. Inline
409 /// frames are not included in this frame index count; their concrete
410 /// frame index will be the same as the concrete frame that they are
411 /// derived from.
413
414 /// Create a ValueObject for a given Variable in this StackFrame.
415 ///
416 /// \param [in] variable_sp
417 /// The Variable to base this ValueObject on
418 ///
419 /// \param [in] use_dynamic
420 /// Whether the correct dynamic type of the variable should be
421 /// determined before creating the ValueObject, or if the static type
422 /// is sufficient. One of the DynamicValueType enumerated values.
423 ///
424 /// \return
425 /// A ValueObject for this variable.
428 lldb::DynamicValueType use_dynamic);
429
430 /// Query this frame to determine what the default language should be when
431 /// parsing expressions given the execution context.
432 ///
433 /// \return
434 /// The language of the frame if known, else lldb::eLanguageTypeUnknown.
436
437 // similar to GetLanguage(), but is allowed to take a potentially incorrect
438 // guess if exact information is not available
440
441 /// Attempt to econstruct the ValueObject for a given raw address touched by
442 /// the current instruction. The ExpressionPath should indicate how to get
443 /// to this value using "frame variable."
444 ///
445 /// \param [in] addr
446 /// The raw address.
447 ///
448 /// \return
449 /// The ValueObject if found. If valid, it has a valid ExpressionPath.
451
452 /// Attempt to reconstruct the ValueObject for the address contained in a
453 /// given register plus an offset. The ExpressionPath should indicate how
454 /// to get to this value using "frame variable."
455 ///
456 /// \param [in] reg
457 /// The name of the register.
458 ///
459 /// \param [in] offset
460 /// The offset from the register. Particularly important for sp...
461 ///
462 /// \return
463 /// The ValueObject if found. If valid, it has a valid ExpressionPath.
465 int64_t offset);
466
467 /// Attempt to reconstruct the ValueObject for a variable with a given \a name
468 /// from within the current StackFrame, within the current block. The search
469 /// for the variable starts in the deepest block corresponding to the current
470 /// PC in the stack frame and traverse through all parent blocks stopping at
471 /// inlined function boundaries.
472 ///
473 /// \param [in] name
474 /// The name of the variable.
475 ///
476 /// \return
477 /// The ValueObject if found.
479
480 // lldb::ExecutionContextScope pure virtual functions
482
484
486
488
489 void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
490
492
493protected:
494 friend class StackFrameList;
495
496 void SetSymbolContextScope(SymbolContextScope *symbol_scope);
497
499
501
502 bool HasCachedData() const;
503
504private:
505 // For StackFrame only
511 Address m_frame_code_addr; // The frame code address (might not be the same as
512 // the actual PC for inlined frames) as a
513 // section/offset address
518 bool m_cfa_is_valid; // Does this frame have a CFA? Different from CFA ==
519 // LLDB_INVALID_ADDRESS
521
522 // Whether this frame behaves like the zeroth frame, in the sense
523 // that its pc value might not immediately follow a call (and thus might
524 // be the first address of its function). True for actual frame zero as
525 // well as any other frame with the same trait.
529 // variable in
530 // m_variable_list_sp
533 std::recursive_mutex m_mutex;
534
535 StackFrame(const StackFrame &) = delete;
536 const StackFrame &operator=(const StackFrame &) = delete;
537};
538
539} // namespace lldb_private
540
541#endif // LLDB_TARGET_STACKFRAME_H
static llvm::raw_ostream & error(Stream &strm)
A section + offset based address class.
Definition: Address.h:59
A class that describes a single lexical block.
Definition: Block.h:41
A uniqued constant string class.
Definition: ConstString.h:40
"lldb/Expression/DWARFExpressionList.h" Encapsulates a range map from file address range to a single ...
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
A class to manage flags.
Definition: Flags.h:22
This base class provides an interface to stack frames.
Definition: StackFrame.h:41
void SetSymbolContextScope(SymbolContextScope *symbol_scope)
Definition: StackFrame.cpp:184
lldb::VariableListSP m_variable_list_sp
Definition: StackFrame.h:527
void UpdatePreviousFrameFromCurrentFrame(StackFrame &curr_frame)
lldb::ThreadSP GetThread() const
Definition: StackFrame.h:125
uint32_t GetConcreteFrameIndex() const
Query this frame to find what frame it is in this Thread's StackFrameList, not counting inlined frame...
Definition: StackFrame.h:412
@ eExpressionPathOptionsInspectAnonymousUnions
Definition: StackFrame.h:49
@ eExpressionPathOptionsAllowDirectIVarAccess
Definition: StackFrame.h:48
@ eExpressionPathOptionsNoSyntheticArrayRange
Definition: StackFrame.h:47
@ eExpressionPathOptionsNoSyntheticChildren
Definition: StackFrame.h:46
VariableList * GetVariableList(bool get_file_globals, Status *error_ptr)
Retrieve the list of variables that are in scope at this StackFrame's pc.
Definition: StackFrame.cpp:424
DWARFExpressionList * GetFrameBaseExpression(Status *error_ptr)
Get the DWARFExpressionList corresponding to the Canonical Frame Address.
void SetFrameIndex(uint32_t index)
Set this frame's synthetic frame index.
Definition: StackFrame.h:402
void UpdateCurrentFrameFromPreviousFrame(StackFrame &prev_frame)
const StackFrame & operator=(const StackFrame &)=delete
ValueObjectList m_variable_list_value_objects
Definition: StackFrame.h:528
lldb::ThreadWP m_thread_wp
Definition: StackFrame.h:506
void DumpUsingSettingsFormat(Stream *strm, bool show_unique=false, const char *frame_marker=nullptr)
Print a description for this frame using the frame-format formatter settings.
bool IsInlined()
Query whether this frame is a concrete frame on the call stack, or if it is an inlined frame derived ...
lldb::LanguageType GetLanguage()
Query this frame to determine what the default language should be when parsing expressions given the ...
lldb::ValueObjectSP GetValueForVariableExpressionPath(llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic, uint32_t options, lldb::VariableSP &var_sp, Status &error)
Create a ValueObject for a variable name / pathname, possibly including simple dereference/child sele...
Definition: StackFrame.cpp:508
lldb::RegisterContextSP GetRegisterContext()
Get the RegisterContext for this frame, if possible.
lldb::RegisterContextSP m_reg_context_sp
Definition: StackFrame.h:509
lldb::ValueObjectSP GuessValueForRegisterAndOffset(ConstString reg, int64_t offset)
Attempt to reconstruct the ValueObject for the address contained in a given register plus an offset.
StackFrame(const StackFrame &)=delete
lldb::VariableListSP GetInScopeVariableList(bool get_file_globals, bool must_have_valid_location=false)
Retrieve the list of variables that are in scope at this StackFrame's pc.
Definition: StackFrame.cpp:475
lldb::RecognizedStackFrameSP m_recognized_frame_sp
Definition: StackFrame.h:531
Address GetFrameCodeAddressForSymbolication()
Get the current code Address suitable for symbolication, may not be the same as GetFrameCodeAddress()...
Definition: StackFrame.cpp:222
@ History
A historical stack frame – possibly without CFA or registers or local variables.
@ Artificial
An artificial stack frame (e.g.
@ Regular
A regular stack frame with access to registers and local variables.
uint32_t m_concrete_frame_index
Definition: StackFrame.h:508
lldb::ValueObjectSP GuessValueForAddress(lldb::addr_t addr)
Attempt to econstruct the ValueObject for a given raw address touched by the current instruction.
bool ChangePC(lldb::addr_t pc)
Change the pc value for a given thread.
Definition: StackFrame.cpp:247
lldb::ThreadSP CalculateThread() override
lldb::ValueObjectSP GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic)
Create a ValueObject for a given Variable in this StackFrame.
StreamString m_disassembly
Definition: StackFrame.h:532
lldb::StackFrameSP CalculateStackFrame() override
const SymbolContext & GetSymbolContext(lldb::SymbolContextItem resolve_scope)
Provide a SymbolContext for this StackFrame's current pc value.
Definition: StackFrame.cpp:300
bool IsHistorical() const
Query whether this frame is part of a historical backtrace.
const char * Disassemble()
Return the disassembly for the instructions of this StackFrame's function as a single C string.
Definition: StackFrame.cpp:261
bool IsArtificial() const
Query whether this frame is artificial (e.g a synthesized result of inferring missing tail call frame...
void CalculateExecutionContext(ExecutionContext &exe_ctx) override
Reconstruct the object's execution context into sc.
void Dump(Stream *strm, bool show_frame_index, bool show_fullpaths)
Print a description for this frame using a default format.
uint32_t GetFrameIndex() const
Query this frame to find what frame it is in this Thread's StackFrameList.
Definition: StackFrame.cpp:175
bool HasDebugInformation()
Determine whether this StackFrame has debug information available or not.
bool GetStatus(Stream &strm, bool show_frame_info, bool show_source, bool show_unique=false, const char *frame_marker=nullptr)
Print a description of this stack frame and/or the source context/assembly for this stack frame.
Block * GetFrameBlock()
Get the current lexical scope block for this StackFrame, if possible.
Definition: StackFrame.cpp:275
bool GetFrameBaseValue(Scalar &value, Status *error_ptr)
Return the Canonical Frame Address (DWARF term) for this frame.
lldb::LanguageType GuessLanguage()
lldb::ProcessSP CalculateProcess() override
const lldb::RegisterContextSP & GetRegisterContextSP() const
Definition: StackFrame.h:241
lldb::RecognizedStackFrameSP GetRecognizedFrame()
std::recursive_mutex m_mutex
Definition: StackFrame.h:533
lldb::ValueObjectSP FindVariable(ConstString name)
Attempt to reconstruct the ValueObject for a variable with a given name from within the current Stack...
const Address & GetFrameCodeAddress()
Get an Address for the current pc value in this StackFrame.
Definition: StackFrame.cpp:190
lldb::TargetSP CalculateTarget() override
An error handling class.
Definition: Status.h:44
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
"lldb/Symbol/SymbolContextScope.h" Inherit from this if your object is part of a symbol context and c...
Defines a symbol context baton that can be handed other debug core functions.
Definition: SymbolContext.h:33
A collection of ValueObject values that.
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
std::shared_ptr< lldb_private::StackFrame > StackFrameSP
Definition: lldb-forward.h:399
std::shared_ptr< lldb_private::RecognizedStackFrame > RecognizedStackFrameSP
Definition: lldb-forward.h:382
std::shared_ptr< lldb_private::Thread > ThreadSP
Definition: lldb-forward.h:425
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP
Definition: lldb-forward.h:458
LanguageType
Programming language type.
std::shared_ptr< lldb_private::Process > ProcessSP
Definition: lldb-forward.h:368
std::shared_ptr< lldb_private::VariableList > VariableListSP
Definition: lldb-forward.h:461
std::shared_ptr< lldb_private::Variable > VariableSP
Definition: lldb-forward.h:460
uint64_t user_id_t
Definition: lldb-types.h:80
uint64_t addr_t
Definition: lldb-types.h:79
std::shared_ptr< lldb_private::Target > TargetSP
Definition: lldb-forward.h:423
std::weak_ptr< lldb_private::Thread > ThreadWP
Definition: lldb-forward.h:426
std::shared_ptr< lldb_private::RegisterContext > RegisterContextSP
Definition: lldb-forward.h:373