1 //===-- SBDebugger.h --------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLDB_SBDebugger_h_ 11 #define LLDB_SBDebugger_h_ 12 13 #include <stdio.h> 14 15 #include "lldb/API/SBDefines.h" 16 #include "lldb/API/SBInitializerOptions.h" 17 #include "lldb/API/SBPlatform.h" 18 19 namespace lldb { 20 21 class LLDB_API SBInputReader { 22 public: 23 SBInputReader() = default; 24 ~SBInputReader() = default; 25 26 SBError Initialize(lldb::SBDebugger &, 27 unsigned long (*)(void *, lldb::SBInputReader *, 28 lldb::InputReaderAction, char const *, 29 unsigned long), 30 void *, lldb::InputReaderGranularity, char const *, 31 char const *, bool); 32 void SetIsDone(bool); 33 bool IsActive() const; 34 }; 35 36 class LLDB_API SBDebugger { 37 public: 38 SBDebugger(); 39 40 SBDebugger(const lldb::SBDebugger &rhs); 41 42 SBDebugger(const lldb::DebuggerSP &debugger_sp); 43 44 ~SBDebugger(); 45 46 lldb::SBDebugger &operator=(const lldb::SBDebugger &rhs); 47 48 static void Initialize(); 49 static lldb::SBError Initialize(SBInitializerOptions &options); 50 51 static void Terminate(); 52 53 // Deprecated, use the one that takes a source_init_files bool. 54 static lldb::SBDebugger Create(); 55 56 static lldb::SBDebugger Create(bool source_init_files); 57 58 static lldb::SBDebugger Create(bool source_init_files, 59 lldb::LogOutputCallback log_callback, 60 void *baton); 61 62 static void Destroy(lldb::SBDebugger &debugger); 63 64 static void MemoryPressureDetected(); 65 66 bool IsValid() const; 67 68 void Clear(); 69 70 void SetAsync(bool b); 71 72 bool GetAsync(); 73 74 void SkipLLDBInitFiles(bool b); 75 76 void SkipAppInitFiles(bool b); 77 78 void SetInputFileHandle(FILE *f, bool transfer_ownership); 79 80 void SetOutputFileHandle(FILE *f, bool transfer_ownership); 81 82 void SetErrorFileHandle(FILE *f, bool transfer_ownership); 83 84 FILE *GetInputFileHandle(); 85 86 FILE *GetOutputFileHandle(); 87 88 FILE *GetErrorFileHandle(); 89 90 void SaveInputTerminalState(); 91 92 void RestoreInputTerminalState(); 93 94 lldb::SBCommandInterpreter GetCommandInterpreter(); 95 96 void HandleCommand(const char *command); 97 98 lldb::SBListener GetListener(); 99 100 void HandleProcessEvent(const lldb::SBProcess &process, 101 const lldb::SBEvent &event, FILE *out, FILE *err); 102 103 lldb::SBTarget CreateTarget(const char *filename, const char *target_triple, 104 const char *platform_name, 105 bool add_dependent_modules, lldb::SBError &error); 106 107 lldb::SBTarget CreateTargetWithFileAndTargetTriple(const char *filename, 108 const char *target_triple); 109 110 lldb::SBTarget CreateTargetWithFileAndArch(const char *filename, 111 const char *archname); 112 113 lldb::SBTarget CreateTarget(const char *filename); 114 115 lldb::SBTarget GetDummyTarget(); 116 117 // Return true if target is deleted from the target list of the debugger. 118 bool DeleteTarget(lldb::SBTarget &target); 119 120 lldb::SBTarget GetTargetAtIndex(uint32_t idx); 121 122 uint32_t GetIndexOfTarget(lldb::SBTarget target); 123 124 lldb::SBTarget FindTargetWithProcessID(pid_t pid); 125 126 lldb::SBTarget FindTargetWithFileAndArch(const char *filename, 127 const char *arch); 128 129 uint32_t GetNumTargets(); 130 131 lldb::SBTarget GetSelectedTarget(); 132 133 void SetSelectedTarget(SBTarget &target); 134 135 lldb::SBPlatform GetSelectedPlatform(); 136 137 void SetSelectedPlatform(lldb::SBPlatform &platform); 138 139 /// Get the number of currently active platforms. 140 uint32_t GetNumPlatforms(); 141 142 /// Get one of the currently active platforms. 143 lldb::SBPlatform GetPlatformAtIndex(uint32_t idx); 144 145 /// Get the number of available platforms. 146 /// 147 /// The return value should match the number of entries output by the 148 /// "platform list" command. 149 uint32_t GetNumAvailablePlatforms(); 150 151 /// Get the name and description of one of the available platforms. 152 /// 153 /// @param[in] idx 154 /// Zero-based index of the platform for which info should be retrieved, 155 /// must be less than the value returned by GetNumAvailablePlatforms(). 156 lldb::SBStructuredData GetAvailablePlatformInfoAtIndex(uint32_t idx); 157 158 lldb::SBSourceManager GetSourceManager(); 159 160 // REMOVE: just for a quick fix, need to expose platforms through 161 // SBPlatform from this class. 162 lldb::SBError SetCurrentPlatform(const char *platform_name); 163 164 bool SetCurrentPlatformSDKRoot(const char *sysroot); 165 166 // FIXME: Once we get the set show stuff in place, the driver won't need 167 // an interface to the Set/Get UseExternalEditor. 168 bool SetUseExternalEditor(bool input); 169 170 bool GetUseExternalEditor(); 171 172 bool SetUseColor(bool use_color); 173 174 bool GetUseColor() const; 175 176 static bool GetDefaultArchitecture(char *arch_name, size_t arch_name_len); 177 178 static bool SetDefaultArchitecture(const char *arch_name); 179 180 lldb::ScriptLanguage GetScriptingLanguage(const char *script_language_name); 181 182 static const char *GetVersionString(); 183 184 static const char *StateAsCString(lldb::StateType state); 185 186 static SBStructuredData GetBuildConfiguration(); 187 188 static bool StateIsRunningState(lldb::StateType state); 189 190 static bool StateIsStoppedState(lldb::StateType state); 191 192 bool EnableLog(const char *channel, const char **categories); 193 194 void SetLoggingCallback(lldb::LogOutputCallback log_callback, void *baton); 195 196 // DEPRECATED 197 void DispatchInput(void *baton, const void *data, size_t data_len); 198 199 void DispatchInput(const void *data, size_t data_len); 200 201 void DispatchInputInterrupt(); 202 203 void DispatchInputEndOfFile(); 204 205 void PushInputReader(lldb::SBInputReader &reader); 206 207 const char *GetInstanceName(); 208 209 static SBDebugger FindDebuggerWithID(int id); 210 211 static lldb::SBError SetInternalVariable(const char *var_name, 212 const char *value, 213 const char *debugger_instance_name); 214 215 static lldb::SBStringList 216 GetInternalVariableValue(const char *var_name, 217 const char *debugger_instance_name); 218 219 bool GetDescription(lldb::SBStream &description); 220 221 uint32_t GetTerminalWidth() const; 222 223 void SetTerminalWidth(uint32_t term_width); 224 225 lldb::user_id_t GetID(); 226 227 const char *GetPrompt() const; 228 229 void SetPrompt(const char *prompt); 230 231 const char *GetReproducerPath() const; 232 233 lldb::ScriptLanguage GetScriptLanguage() const; 234 235 void SetScriptLanguage(lldb::ScriptLanguage script_lang); 236 237 bool GetCloseInputOnEOF() const; 238 239 void SetCloseInputOnEOF(bool b); 240 241 SBTypeCategory GetCategory(const char *category_name); 242 243 SBTypeCategory GetCategory(lldb::LanguageType lang_type); 244 245 SBTypeCategory CreateCategory(const char *category_name); 246 247 bool DeleteCategory(const char *category_name); 248 249 uint32_t GetNumCategories(); 250 251 SBTypeCategory GetCategoryAtIndex(uint32_t); 252 253 SBTypeCategory GetDefaultCategory(); 254 255 SBTypeFormat GetFormatForType(SBTypeNameSpecifier); 256 257 #ifndef LLDB_DISABLE_PYTHON 258 SBTypeSummary GetSummaryForType(SBTypeNameSpecifier); 259 #endif 260 261 SBTypeFilter GetFilterForType(SBTypeNameSpecifier); 262 263 #ifndef LLDB_DISABLE_PYTHON 264 SBTypeSynthetic GetSyntheticForType(SBTypeNameSpecifier); 265 #endif 266 267 void RunCommandInterpreter(bool auto_handle_events, bool spawn_thread); 268 269 void RunCommandInterpreter(bool auto_handle_events, bool spawn_thread, 270 SBCommandInterpreterRunOptions &options, 271 int &num_errors, bool &quit_requested, 272 bool &stopped_for_crash); 273 274 SBError RunREPL(lldb::LanguageType language, const char *repl_options); 275 276 private: 277 friend class SBCommandInterpreter; 278 friend class SBInputReader; 279 friend class SBListener; 280 friend class SBProcess; 281 friend class SBSourceManager; 282 friend class SBTarget; 283 284 lldb::SBTarget FindTargetWithLLDBProcess(const lldb::ProcessSP &processSP); 285 286 void reset(const lldb::DebuggerSP &debugger_sp); 287 288 lldb_private::Debugger *get() const; 289 290 lldb_private::Debugger &ref() const; 291 292 const lldb::DebuggerSP &get_sp() const; 293 294 lldb::DebuggerSP m_opaque_sp; 295 296 }; // class SBDebugger 297 298 } // namespace lldb 299 300 #endif // LLDB_SBDebugger_h_ 301