blob: 827892453a08e2ede064e11b6f3c312055844906 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBDebugger.cpp ------------------------------------------*- 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
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000010#include "lldb/API/SBDebugger.h"
Chris Lattner24943d22010-06-08 16:52:24 +000011
Greg Claytonb3448432011-03-24 21:19:54 +000012#include "lldb/lldb-private.h"
Chris Lattner24943d22010-06-08 16:52:24 +000013
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000014#include "lldb/API/SBListener.h"
15#include "lldb/API/SBBroadcaster.h"
16#include "lldb/API/SBCommandInterpreter.h"
17#include "lldb/API/SBCommandReturnObject.h"
Greg Clayton180546b2011-04-30 01:09:13 +000018#include "lldb/API/SBError.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000019#include "lldb/API/SBEvent.h"
20#include "lldb/API/SBFrame.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000021#include "lldb/API/SBInputReader.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000022#include "lldb/API/SBProcess.h"
23#include "lldb/API/SBSourceManager.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000024#include "lldb/API/SBStream.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000025#include "lldb/API/SBStringList.h"
26#include "lldb/API/SBTarget.h"
27#include "lldb/API/SBThread.h"
Greg Clayton887aa282010-10-11 01:05:37 +000028#include "lldb/Core/Debugger.h"
29#include "lldb/Core/State.h"
30#include "lldb/Interpreter/Args.h"
31#include "lldb/Interpreter/CommandInterpreter.h"
32#include "lldb/Target/Process.h"
33#include "lldb/Target/TargetList.h"
Chris Lattner24943d22010-06-08 16:52:24 +000034
35using namespace lldb;
36using namespace lldb_private;
37
38void
39SBDebugger::Initialize ()
40{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000041 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000042
43 if (log)
44 log->Printf ("SBDebugger::Initialize ()");
45
Greg Claytone86cbb92011-03-22 01:14:58 +000046 SBCommandInterpreter::InitializeSWIG ();
47
Chris Lattner24943d22010-06-08 16:52:24 +000048 Debugger::Initialize();
49}
50
51void
52SBDebugger::Terminate ()
53{
54 Debugger::Terminate();
55}
56
Greg Clayton43490d12010-07-30 20:12:55 +000057void
58SBDebugger::Clear ()
59{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000060 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000061
62 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000063 log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
Caroline Ticec0446862010-12-20 18:35:50 +000064
65 if (m_opaque_sp)
66 m_opaque_sp->CleanUpInputReaders ();
Caroline Tice7826c882010-10-26 03:11:13 +000067
Greg Clayton43490d12010-07-30 20:12:55 +000068 m_opaque_sp.reset();
69}
70
Greg Clayton63094e02010-06-23 01:19:29 +000071SBDebugger
72SBDebugger::Create()
73{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000074 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000075
Greg Clayton63094e02010-06-23 01:19:29 +000076 SBDebugger debugger;
77 debugger.reset(Debugger::CreateInstance());
Caroline Tice7826c882010-10-26 03:11:13 +000078
79 if (log)
80 {
81 SBStream sstr;
82 debugger.GetDescription (sstr);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000083 log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000084 }
85
Greg Clayton63094e02010-06-23 01:19:29 +000086 return debugger;
87}
88
Caroline Ticec4ed12f2011-01-22 01:02:07 +000089void
90SBDebugger::Destroy (SBDebugger &debugger)
91{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000092 LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticec4ed12f2011-01-22 01:02:07 +000093
94 if (log)
95 {
96 SBStream sstr;
97 debugger.GetDescription (sstr);
98 log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
99 }
100
101 Debugger::Destroy (debugger.m_opaque_sp);
102
103 if (debugger.m_opaque_sp.get() != NULL)
104 debugger.m_opaque_sp.reset();
105}
106
Greg Clayton63094e02010-06-23 01:19:29 +0000107SBDebugger::SBDebugger () :
108 m_opaque_sp ()
109{
110}
111
Greg Clayton538eb822010-11-05 23:17:00 +0000112SBDebugger::SBDebugger(const SBDebugger &rhs) :
113 m_opaque_sp (rhs.m_opaque_sp)
114{
115}
116
117SBDebugger &
118SBDebugger::operator = (const SBDebugger &rhs)
119{
120 if (this != &rhs)
121 {
122 m_opaque_sp = rhs.m_opaque_sp;
123 }
124 return *this;
125}
126
Greg Clayton63094e02010-06-23 01:19:29 +0000127SBDebugger::~SBDebugger ()
128{
129}
130
131bool
132SBDebugger::IsValid() const
133{
134 return m_opaque_sp.get() != NULL;
135}
136
137
Chris Lattner24943d22010-06-08 16:52:24 +0000138void
139SBDebugger::SetAsync (bool b)
140{
Greg Clayton63094e02010-06-23 01:19:29 +0000141 if (m_opaque_sp)
142 m_opaque_sp->SetAsyncExecution(b);
Chris Lattner24943d22010-06-08 16:52:24 +0000143}
144
Greg Clayton887aa282010-10-11 01:05:37 +0000145void
146SBDebugger::SkipLLDBInitFiles (bool b)
147{
148 if (m_opaque_sp)
149 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
150}
151
Jim Ingham574c3d62011-08-12 23:34:31 +0000152void
153SBDebugger::SkipAppInitFiles (bool b)
154{
155 if (m_opaque_sp)
156 m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
157}
158
Chris Lattner24943d22010-06-08 16:52:24 +0000159// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
160// trying to switch modes in the middle of a debugging session.
161void
162SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
163{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000164 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000165
166 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000167 log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
168 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000169
Greg Clayton63094e02010-06-23 01:19:29 +0000170 if (m_opaque_sp)
171 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000172}
173
174void
175SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
176{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000177 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000178
179
180 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000181 log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
182 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000183
Greg Clayton63094e02010-06-23 01:19:29 +0000184 if (m_opaque_sp)
185 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000186}
187
188void
189SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
190{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000191 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000192
193
194 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000195 log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
196 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000197
Greg Clayton63094e02010-06-23 01:19:29 +0000198 if (m_opaque_sp)
199 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000200}
201
202FILE *
203SBDebugger::GetInputFileHandle ()
204{
Greg Clayton63094e02010-06-23 01:19:29 +0000205 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000206 return m_opaque_sp->GetInputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000207 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000208}
209
210FILE *
211SBDebugger::GetOutputFileHandle ()
212{
Greg Clayton63094e02010-06-23 01:19:29 +0000213 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000214 return m_opaque_sp->GetOutputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000215 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000216}
217
218FILE *
219SBDebugger::GetErrorFileHandle ()
220{
Greg Clayton63094e02010-06-23 01:19:29 +0000221 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000222 return m_opaque_sp->GetErrorFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000223 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000224}
225
226SBCommandInterpreter
227SBDebugger::GetCommandInterpreter ()
228{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000229 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000230
Greg Clayton63094e02010-06-23 01:19:29 +0000231 SBCommandInterpreter sb_interpreter;
232 if (m_opaque_sp)
233 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Caroline Tice7826c882010-10-26 03:11:13 +0000234
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000235 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000236 log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000237 m_opaque_sp.get(), sb_interpreter.get());
238
Chris Lattner24943d22010-06-08 16:52:24 +0000239 return sb_interpreter;
240}
241
242void
243SBDebugger::HandleCommand (const char *command)
244{
Greg Clayton63094e02010-06-23 01:19:29 +0000245 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000246 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000247 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
248 Mutex::Locker api_locker;
249 if (target_sp)
250 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
251
Greg Clayton63094e02010-06-23 01:19:29 +0000252 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
253 SBCommandReturnObject result;
254
255 sb_interpreter.HandleCommand (command, result, false);
256
257 if (GetErrorFileHandle() != NULL)
258 result.PutError (GetErrorFileHandle());
259 if (GetOutputFileHandle() != NULL)
260 result.PutOutput (GetOutputFileHandle());
261
262 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000263 {
Greg Clayton63094e02010-06-23 01:19:29 +0000264 SBProcess process(GetCommandInterpreter().GetProcess ());
265 if (process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000266 {
Greg Clayton63094e02010-06-23 01:19:29 +0000267 EventSP event_sp;
268 Listener &lldb_listener = m_opaque_sp->GetListener();
269 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
270 {
271 SBEvent event(event_sp);
272 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
273 }
Chris Lattner24943d22010-06-08 16:52:24 +0000274 }
275 }
276 }
277}
278
279SBListener
280SBDebugger::GetListener ()
281{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000282 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000283
Greg Clayton63094e02010-06-23 01:19:29 +0000284 SBListener sb_listener;
285 if (m_opaque_sp)
286 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000287
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000288 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000289 log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000290 sb_listener.get());
291
Chris Lattner24943d22010-06-08 16:52:24 +0000292 return sb_listener;
293}
294
295void
296SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
297{
Greg Claytonbdcda462010-12-20 20:49:23 +0000298 if (!process.IsValid())
299 return;
Chris Lattner24943d22010-06-08 16:52:24 +0000300
Greg Claytonbdcda462010-12-20 20:49:23 +0000301 const uint32_t event_type = event.GetType();
302 char stdio_buffer[1024];
303 size_t len;
Chris Lattner24943d22010-06-08 16:52:24 +0000304
Greg Claytonbdcda462010-12-20 20:49:23 +0000305 Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex());
306
307 if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
Chris Lattner24943d22010-06-08 16:52:24 +0000308 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000309 // Drain stdout when we stop just in case we have any bytes
310 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
311 if (out != NULL)
312 ::fwrite (stdio_buffer, 1, len, out);
313 }
314
315 if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
316 {
317 // Drain stderr when we stop just in case we have any bytes
318 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
319 if (err != NULL)
320 ::fwrite (stdio_buffer, 1, len, err);
321 }
322
323 if (event_type & Process::eBroadcastBitStateChanged)
324 {
325 StateType event_state = SBProcess::GetStateFromEvent (event);
326
327 if (event_state == eStateInvalid)
328 return;
329
330 bool is_stopped = StateIsStoppedState (event_state);
331 if (!is_stopped)
332 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000333 }
334}
335
Chris Lattner24943d22010-06-08 16:52:24 +0000336SBSourceManager &
337SBDebugger::GetSourceManager ()
338{
339 static SourceManager g_lldb_source_manager;
Greg Clayton538eb822010-11-05 23:17:00 +0000340 static SBSourceManager g_sb_source_manager (&g_lldb_source_manager);
Chris Lattner24943d22010-06-08 16:52:24 +0000341 return g_sb_source_manager;
342}
343
344
345bool
346SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
347{
348 if (arch_name && arch_name_len)
349 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000350 ArchSpec default_arch = Target::GetDefaultArchitecture ();
Caroline Tice5bc8c972010-09-20 20:44:43 +0000351
Chris Lattner24943d22010-06-08 16:52:24 +0000352 if (default_arch.IsValid())
353 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000354 const std::string &triple_str = default_arch.GetTriple().str();
355 if (!triple_str.empty())
356 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
357 else
358 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
Chris Lattner24943d22010-06-08 16:52:24 +0000359 return true;
360 }
361 }
362 if (arch_name && arch_name_len)
363 arch_name[0] = '\0';
364 return false;
365}
366
367
368bool
369SBDebugger::SetDefaultArchitecture (const char *arch_name)
370{
371 if (arch_name)
372 {
Greg Claytonf15996e2011-04-07 22:46:35 +0000373 ArchSpec arch (arch_name, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000374 if (arch.IsValid())
375 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000376 Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000377 return true;
378 }
379 }
380 return false;
381}
382
383ScriptLanguage
384SBDebugger::GetScriptingLanguage (const char *script_language_name)
385{
Greg Claytonbdcda462010-12-20 20:49:23 +0000386
Chris Lattner24943d22010-06-08 16:52:24 +0000387 return Args::StringToScriptLanguage (script_language_name,
388 eScriptLanguageDefault,
389 NULL);
390}
Chris Lattner24943d22010-06-08 16:52:24 +0000391
392const char *
393SBDebugger::GetVersionString ()
394{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000395 return GetVersion();
Chris Lattner24943d22010-06-08 16:52:24 +0000396}
397
398const char *
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000399SBDebugger::StateAsCString (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000400{
Caroline Ticea2cffd32011-04-25 22:05:51 +0000401 return lldb_private::StateAsCString (state);
Chris Lattner24943d22010-06-08 16:52:24 +0000402}
403
404bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000405SBDebugger::StateIsRunningState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000406{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000407 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000408
Caroline Ticea2cffd32011-04-25 22:05:51 +0000409 const bool result = lldb_private::StateIsRunningState (state);
Greg Claytona66ba462010-10-30 04:51:46 +0000410 if (log)
411 log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000412 StateAsCString (state), result);
Greg Claytona66ba462010-10-30 04:51:46 +0000413
414 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000415}
416
417bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000418SBDebugger::StateIsStoppedState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000419{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000420 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000421
Caroline Ticea2cffd32011-04-25 22:05:51 +0000422 const bool result = lldb_private::StateIsStoppedState (state);
Caroline Tice7826c882010-10-26 03:11:13 +0000423 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000424 log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000425 StateAsCString (state), result);
Caroline Tice7826c882010-10-26 03:11:13 +0000426
Greg Claytona66ba462010-10-30 04:51:46 +0000427 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000428}
429
430
431SBTarget
432SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
433 const char *target_triple)
434{
Greg Clayton63094e02010-06-23 01:19:29 +0000435 SBTarget target;
436 if (m_opaque_sp)
437 {
438 ArchSpec arch;
Greg Clayton537a7a82010-10-20 20:54:39 +0000439 FileSpec file_spec (filename, true);
Greg Claytonf15996e2011-04-07 22:46:35 +0000440 arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton63094e02010-06-23 01:19:29 +0000441 TargetSP target_sp;
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000442 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp));
Greg Clayton63094e02010-06-23 01:19:29 +0000443 target.reset (target_sp);
444 }
Greg Claytona66ba462010-10-30 04:51:46 +0000445
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000446 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000447 if (log)
448 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000449 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000450 m_opaque_sp.get(), filename, target_triple, target.get());
451 }
452
Chris Lattner24943d22010-06-08 16:52:24 +0000453 return target;
454}
455
456SBTarget
Greg Clayton940b1032011-02-23 00:35:02 +0000457SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
Chris Lattner24943d22010-06-08 16:52:24 +0000458{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000459 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000460
Greg Clayton63094e02010-06-23 01:19:29 +0000461 SBTarget target;
462 if (m_opaque_sp)
463 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000464 FileSpec file (filename, true);
Greg Clayton940b1032011-02-23 00:35:02 +0000465 ArchSpec arch;
Greg Clayton63094e02010-06-23 01:19:29 +0000466 TargetSP target_sp;
467 Error error;
Chris Lattner24943d22010-06-08 16:52:24 +0000468
Greg Clayton940b1032011-02-23 00:35:02 +0000469 if (arch_cstr)
Greg Claytonf15996e2011-04-07 22:46:35 +0000470 arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton940b1032011-02-23 00:35:02 +0000471
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000472 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000473
474 if (error.Success())
475 {
Jim Inghamc8332952010-08-26 21:32:51 +0000476 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000477 target.reset(target_sp);
478 }
Chris Lattner24943d22010-06-08 16:52:24 +0000479 }
Caroline Tice7826c882010-10-26 03:11:13 +0000480
481 if (log)
482 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000483 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
Greg Clayton940b1032011-02-23 00:35:02 +0000484 m_opaque_sp.get(), filename, arch_cstr, target.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000485 }
486
Greg Clayton63094e02010-06-23 01:19:29 +0000487 return target;
488}
489
490SBTarget
491SBDebugger::CreateTarget (const char *filename)
492{
493 SBTarget target;
494 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000495 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000496 FileSpec file (filename, true);
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000497 ArchSpec arch = Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000498 TargetSP target_sp;
499 Error error;
500
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000501 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000502
503 if (error.Success())
504 {
Jim Inghamc8332952010-08-26 21:32:51 +0000505 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000506 target.reset (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000507 }
508 }
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000509 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000510 if (log)
511 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000512 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000513 m_opaque_sp.get(), filename, target.get());
514 }
Greg Clayton63094e02010-06-23 01:19:29 +0000515 return target;
Chris Lattner24943d22010-06-08 16:52:24 +0000516}
517
Johnny Chen409646d2011-06-15 21:24:24 +0000518bool
519SBDebugger::DeleteTarget (lldb::SBTarget &target)
520{
521 bool result = false;
522 if (m_opaque_sp)
523 {
524 // No need to lock, the target list is thread safe
525 result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp);
526 }
527
528 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
529 if (log)
530 {
531 log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
532 }
533
534 return result;
535}
Chris Lattner24943d22010-06-08 16:52:24 +0000536SBTarget
537SBDebugger::GetTargetAtIndex (uint32_t idx)
538{
Greg Clayton63094e02010-06-23 01:19:29 +0000539 SBTarget sb_target;
540 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000541 {
542 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000543 sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Greg Claytonbdcda462010-12-20 20:49:23 +0000544 }
Chris Lattner24943d22010-06-08 16:52:24 +0000545 return sb_target;
546}
547
548SBTarget
549SBDebugger::FindTargetWithProcessID (pid_t pid)
550{
Greg Clayton63094e02010-06-23 01:19:29 +0000551 SBTarget sb_target;
552 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000553 {
554 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000555 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Greg Claytonbdcda462010-12-20 20:49:23 +0000556 }
Chris Lattner24943d22010-06-08 16:52:24 +0000557 return sb_target;
558}
559
560SBTarget
561SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
562{
Greg Clayton63094e02010-06-23 01:19:29 +0000563 SBTarget sb_target;
564 if (m_opaque_sp && filename && filename[0])
565 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000566 // No need to lock, the target list is thread safe
Greg Claytonf15996e2011-04-07 22:46:35 +0000567 ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton537a7a82010-10-20 20:54:39 +0000568 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
Greg Clayton63094e02010-06-23 01:19:29 +0000569 sb_target.reset(target_sp);
570 }
571 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000572}
573
574SBTarget
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000575SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000576{
Greg Clayton63094e02010-06-23 01:19:29 +0000577 SBTarget sb_target;
578 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000579 {
580 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000581 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Greg Claytonbdcda462010-12-20 20:49:23 +0000582 }
Chris Lattner24943d22010-06-08 16:52:24 +0000583 return sb_target;
584}
585
586
587uint32_t
588SBDebugger::GetNumTargets ()
589{
Greg Clayton63094e02010-06-23 01:19:29 +0000590 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000591 {
592 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000593 return m_opaque_sp->GetTargetList().GetNumTargets ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000594 }
Greg Clayton63094e02010-06-23 01:19:29 +0000595 return 0;
596}
Chris Lattner24943d22010-06-08 16:52:24 +0000597
598SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000599SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000600{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000601 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000602
Greg Clayton63094e02010-06-23 01:19:29 +0000603 SBTarget sb_target;
604 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000605 {
606 // No need to lock, the target list is thread safe
Jim Inghamc8332952010-08-26 21:32:51 +0000607 sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
Greg Claytonbdcda462010-12-20 20:49:23 +0000608 }
Caroline Tice7826c882010-10-26 03:11:13 +0000609
610 if (log)
611 {
612 SBStream sstr;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000613 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000614 log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000615 sb_target.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000616 }
617
Chris Lattner24943d22010-06-08 16:52:24 +0000618 return sb_target;
619}
620
621void
622SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
623{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000624 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000625
626 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000627 log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
628 baton, (int) data_len, (const char *) data, data_len);
Caroline Tice7826c882010-10-26 03:11:13 +0000629
Greg Clayton63094e02010-06-23 01:19:29 +0000630 if (m_opaque_sp)
631 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000632}
633
634void
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000635SBDebugger::DispatchInputInterrupt ()
636{
637 if (m_opaque_sp)
638 m_opaque_sp->DispatchInputInterrupt ();
639}
640
641void
642SBDebugger::DispatchInputEndOfFile ()
643{
644 if (m_opaque_sp)
645 m_opaque_sp->DispatchInputEndOfFile ();
646}
Caroline Ticeb38df1e2011-05-09 23:06:58 +0000647
648bool
649SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
650{
651 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
652
653 if (log)
654 log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
655
656 if (m_opaque_sp && reader.IsValid())
657 {
658 InputReaderSP reader_sp (*reader);
659 return m_opaque_sp->InputReaderIsTopReader (reader_sp);
660 }
661
662 return false;
663}
664
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000665
666void
Chris Lattner24943d22010-06-08 16:52:24 +0000667SBDebugger::PushInputReader (SBInputReader &reader)
668{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000669 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000670
671 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000672 log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
Caroline Tice7826c882010-10-26 03:11:13 +0000673
Greg Clayton63094e02010-06-23 01:19:29 +0000674 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000675 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000676 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
677 Mutex::Locker api_locker;
678 if (target_sp)
679 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
Chris Lattner24943d22010-06-08 16:52:24 +0000680 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000681 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000682 }
683}
Greg Clayton63094e02010-06-23 01:19:29 +0000684
685void
Caroline Tice4a348082011-05-02 20:41:46 +0000686SBDebugger::NotifyTopInputReader (InputReaderAction notification)
687{
688 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
689
690 if (log)
691 log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
692
693 if (m_opaque_sp)
694 m_opaque_sp->NotifyTopInputReader (notification);
695}
696
697void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000698SBDebugger::reset (const DebuggerSP &debugger_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000699{
700 m_opaque_sp = debugger_sp;
701}
702
703Debugger *
704SBDebugger::get () const
705{
706 return m_opaque_sp.get();
707}
708
709Debugger &
710SBDebugger::ref () const
711{
712 assert (m_opaque_sp.get());
713 return *m_opaque_sp;
714}
715
716
Caroline Tice558be582010-06-30 16:22:25 +0000717SBDebugger
718SBDebugger::FindDebuggerWithID (int id)
719{
Greg Claytonbdcda462010-12-20 20:49:23 +0000720 // No need to lock, the debugger list is thread safe
Caroline Tice558be582010-06-30 16:22:25 +0000721 SBDebugger sb_debugger;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000722 DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
Caroline Tice558be582010-06-30 16:22:25 +0000723 if (debugger_sp)
724 sb_debugger.reset (debugger_sp);
725 return sb_debugger;
726}
Jim Ingham74989e82010-08-30 19:44:40 +0000727
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000728const char *
729SBDebugger::GetInstanceName()
730{
731 if (m_opaque_sp)
732 return m_opaque_sp->GetInstanceName().AsCString();
733 else
734 return NULL;
735}
736
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000737SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000738SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000739{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000740 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000741
Greg Claytonb3448432011-03-24 21:19:54 +0000742 Error err = root_settings_controller->SetVariable (var_name,
743 value,
744 eVarSetOperationAssign,
745 true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000746 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000747 SBError sb_error;
748 sb_error.SetError (err);
749
750 return sb_error;
751}
752
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000753SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000754SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000755{
756 SBStringList ret_value;
Greg Claytonb3448432011-03-24 21:19:54 +0000757 SettableVariableType var_type;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000758 Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000759
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000760 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000761
Caroline Tice5bc8c972010-09-20 20:44:43 +0000762 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
763
764 if (err.Success())
765 {
766 for (unsigned i = 0; i != value.GetSize(); ++i)
767 ret_value.AppendString (value.GetStringAtIndex(i));
768 }
769 else
770 {
771 ret_value.AppendString (err.AsCString());
772 }
773
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000774
775 return ret_value;
776}
777
Greg Clayton238c0a12010-09-18 01:14:36 +0000778uint32_t
779SBDebugger::GetTerminalWidth () const
780{
781 if (m_opaque_sp)
782 return m_opaque_sp->GetTerminalWidth ();
783 return 0;
784}
785
786void
787SBDebugger::SetTerminalWidth (uint32_t term_width)
788{
789 if (m_opaque_sp)
790 m_opaque_sp->SetTerminalWidth (term_width);
791}
792
793const char *
794SBDebugger::GetPrompt() const
795{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000796 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000797
798 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000799 log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000800 (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
Caroline Tice7826c882010-10-26 03:11:13 +0000801
Greg Clayton238c0a12010-09-18 01:14:36 +0000802 if (m_opaque_sp)
803 return m_opaque_sp->GetPrompt ();
804 return 0;
805}
806
807void
808SBDebugger::SetPrompt (const char *prompt)
809{
810 if (m_opaque_sp)
811 m_opaque_sp->SetPrompt (prompt);
812}
813
814
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000815ScriptLanguage
Greg Clayton238c0a12010-09-18 01:14:36 +0000816SBDebugger::GetScriptLanguage() const
817{
818 if (m_opaque_sp)
819 return m_opaque_sp->GetScriptLanguage ();
820 return eScriptLanguageNone;
821}
822
823void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000824SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
Greg Clayton238c0a12010-09-18 01:14:36 +0000825{
826 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000827 {
Greg Clayton238c0a12010-09-18 01:14:36 +0000828 m_opaque_sp->SetScriptLanguage (script_lang);
Greg Claytonbdcda462010-12-20 20:49:23 +0000829 }
Greg Clayton238c0a12010-09-18 01:14:36 +0000830}
831
Jim Ingham74989e82010-08-30 19:44:40 +0000832bool
833SBDebugger::SetUseExternalEditor (bool value)
834{
835 if (m_opaque_sp)
836 return m_opaque_sp->SetUseExternalEditor (value);
Greg Claytonbdcda462010-12-20 20:49:23 +0000837 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000838}
839
840bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000841SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000842{
843 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000844 return m_opaque_sp->GetUseExternalEditor ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000845 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000846}
847
Caroline Tice98f930f2010-09-20 05:20:02 +0000848bool
849SBDebugger::GetDescription (SBStream &description)
850{
851 if (m_opaque_sp)
852 {
853 const char *name = m_opaque_sp->GetInstanceName().AsCString();
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000854 user_id_t id = m_opaque_sp->GetID();
Greg Clayton49ce6822010-10-31 03:01:06 +0000855 description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id);
Caroline Tice98f930f2010-09-20 05:20:02 +0000856 }
857 else
858 description.Printf ("No value");
859
860 return true;
861}
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000862
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000863user_id_t
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000864SBDebugger::GetID()
865{
866 if (m_opaque_sp)
867 return m_opaque_sp->GetID();
868 return LLDB_INVALID_UID;
869}
Greg Clayton180546b2011-04-30 01:09:13 +0000870
871
872SBError
873SBDebugger::SetCurrentPlatform (const char *platform_name)
874{
875 SBError sb_error;
876 if (m_opaque_sp)
877 {
878 PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
879
880 if (platform_sp)
881 {
882 bool make_selected = true;
883 m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
884 }
885 }
886 return sb_error;
887}
888
Greg Clayton421ca502011-05-29 04:06:55 +0000889bool
Greg Clayton604f0d32011-06-17 03:31:01 +0000890SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
891{
892 if (m_opaque_sp)
893 {
894 PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
895
896 if (platform_sp)
897 {
898 platform_sp->SetSDKRootDirectory (ConstString (sysroot));
899 return true;
900 }
901 }
902 return false;
903}
904
905bool
Greg Clayton421ca502011-05-29 04:06:55 +0000906SBDebugger::GetCloseInputOnEOF () const
907{
908 if (m_opaque_sp)
909 return m_opaque_sp->GetCloseInputOnEOF ();
910 return false;
911}
912
913void
914SBDebugger::SetCloseInputOnEOF (bool b)
915{
916 if (m_opaque_sp)
917 m_opaque_sp->SetCloseInputOnEOF (b);
918}