xref: /freebsd/contrib/llvm-project/lldb/include/lldb/API/SBValueList.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
1 //===-- SBValueList.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_API_SBVALUELIST_H
10 #define LLDB_API_SBVALUELIST_H
11 
12 #include "lldb/API/SBDefines.h"
13 
14 class ValueListImpl;
15 
16 namespace lldb {
17 
18 class LLDB_API SBValueList {
19 public:
20   SBValueList();
21 
22   SBValueList(const lldb::SBValueList &rhs);
23 
24   ~SBValueList();
25 
26   explicit operator bool() const;
27 
28   bool IsValid() const;
29 
30   void Clear();
31 
32   void Append(const lldb::SBValue &val_obj);
33 
34   void Append(const lldb::SBValueList &value_list);
35 
36   uint32_t GetSize() const;
37 
38   lldb::SBValue GetValueAtIndex(uint32_t idx) const;
39 
40   lldb::SBValue GetFirstValueByName(const char *name) const;
41 
42   lldb::SBValue FindValueObjectByUID(lldb::user_id_t uid);
43 
44   const lldb::SBValueList &operator=(const lldb::SBValueList &rhs);
45 
46   // Get an error for why this list is empty.
47   //
48   // If this list is empty, check for an underlying error in the debug
49   // information that prevented this list from being populated. This is not
50   // meant to return an error if there is no debug information as it is ok for a
51   // value list to be empty and no error should be returned in that case. If the
52   // debug info is for an assembly file or language that doesn't have any
53   // variables, no error should be returned.
54   //
55   // This is designed as a way to let users know when they enable certain
56   // compiler options that enable debug information but provide a degraded
57   // debug information content, like -gline-tables-only, which is a compiler
58   // option that allows users to set file and line breakpoints, but users get
59   // confused when no variables show up during debugging.
60   //
61   // It is also designed to inform a user that debug information might be
62   // available if an external file, like a .dwo file, but that file doesn't
63   // exist or wasn't able to be loaded due to a mismatched ID. When debugging
64   // with fission enabled, the line tables are linked into the main executable,
65   // but if the .dwo or .dwp files are not available or have been modified,
66   // users can get confused if they can stop at a file and line breakpoint but
67   // can't see variables in this case.
68   //
69   // This error can give vital clues to the user about the cause is and allow
70   // the user to fix the issue.
71   lldb::SBError GetError();
72 
73 protected:
74   // only useful for visualizing the pointer or comparing two SBValueLists to
75   // see if they are backed by the same underlying Impl.
76   void *opaque_ptr();
77 
78 private:
79   friend class SBFrame;
80 
81   SBValueList(const ValueListImpl *lldb_object_ptr);
82 
83   void Append(lldb::ValueObjectSP &val_obj_sp);
84 
85   void CreateIfNeeded();
86 
87   ValueListImpl *operator->();
88 
89   ValueListImpl &operator*();
90 
91   const ValueListImpl *operator->() const;
92 
93   const ValueListImpl &operator*() const;
94 
95   ValueListImpl &ref();
96 
97   std::unique_ptr<ValueListImpl> m_opaque_up;
98 
99   void SetError(const lldb_private::Status &status);
100 };
101 
102 } // namespace lldb
103 
104 #endif // LLDB_API_SBVALUELIST_H
105