Home | History | Annotate | Download | only in interface
      1 //===-- SWIG Interface for SBDebugger ---------------------------*- 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 namespace lldb {
     11 
     12 %feature("docstring",
     13 "SBDebugger is the primordial object that creates SBTargets and provides
     14 access to them.  It also manages the overall debugging experiences.
     15 
     16 For example (from example/disasm.py),
     17 
     18 import lldb
     19 import os
     20 import sys
     21 
     22 def disassemble_instructions (insts):
     23     for i in insts:
     24         print i
     25 
     26 ...
     27 
     28 # Create a new debugger instance
     29 debugger = lldb.SBDebugger.Create()
     30 
     31 # When we step or continue, don't return from the function until the process
     32 # stops. We do this by setting the async mode to false.
     33 debugger.SetAsync (False)
     34 
     35 # Create a target from a file and arch
     36 print 'Creating a target for \'%s\'' % exe
     37 
     38 target = debugger.CreateTargetWithFileAndArch (exe, lldb.LLDB_ARCH_DEFAULT)
     39 
     40 if target:
     41     # If the target is valid set a breakpoint at main
     42     main_bp = target.BreakpointCreateByName (fname, target.GetExecutable().GetFilename());
     43 
     44     print main_bp
     45 
     46     # Launch the process. Since we specified synchronous mode, we won't return
     47     # from this function until we hit the breakpoint at main
     48     process = target.LaunchSimple (None, None, os.getcwd())
     49 
     50     # Make sure the launch went ok
     51     if process:
     52         # Print some simple process info
     53         state = process.GetState ()
     54         print process
     55         if state == lldb.eStateStopped:
     56             # Get the first thread
     57             thread = process.GetThreadAtIndex (0)
     58             if thread:
     59                 # Print some simple thread info
     60                 print thread
     61                 # Get the first frame
     62                 frame = thread.GetFrameAtIndex (0)
     63                 if frame:
     64                     # Print some simple frame info
     65                     print frame
     66                     function = frame.GetFunction()
     67                     # See if we have debug info (a function)
     68                     if function:
     69                         # We do have a function, print some info for the function
     70                         print function
     71                         # Now get all instructions for this function and print them
     72                         insts = function.GetInstructions(target)
     73                         disassemble_instructions (insts)
     74                     else:
     75                         # See if we have a symbol in the symbol table for where we stopped
     76                         symbol = frame.GetSymbol();
     77                         if symbol:
     78                             # We do have a symbol, print some info for the symbol
     79                             print symbol
     80                             # Now get all instructions for this symbol and print them
     81                             insts = symbol.GetInstructions(target)
     82                             disassemble_instructions (insts)
     83 
     84                     registerList = frame.GetRegisters()
     85                     print 'Frame registers (size of register set = %d):' % registerList.GetSize()
     86                     for value in registerList:
     87                         #print value
     88                         print '%s (number of children = %d):' % (value.GetName(), value.GetNumChildren())
     89                         for child in value:
     90                             print 'Name: ', child.GetName(), ' Value: ', child.GetValue()
     91 
     92             print 'Hit the breakpoint at main, enter to continue and wait for program to exit or \'Ctrl-D\'/\'quit\' to terminate the program'
     93             next = sys.stdin.readline()
     94             if not next or next.rstrip('\n') == 'quit':
     95                 print 'Terminating the inferior process...'
     96                 process.Kill()
     97             else:
     98                 # Now continue to the program exit
     99                 process.Continue()
    100                 # When we return from the above function we will hopefully be at the
    101                 # program exit. Print out some process info
    102                 print process
    103         elif state == lldb.eStateExited:
    104             print 'Didn\'t hit the breakpoint at main, program has exited...'
    105         else:
    106             print 'Unexpected process state: %s, killing process...' % debugger.StateAsCString (state)
    107             process.Kill()
    108 ") SBDebugger;
    109 class SBDebugger
    110 {
    111 public:
    112 
    113     static void
    114     Initialize();
    115 
    116     static void
    117     Terminate();
    118 
    119     static lldb::SBDebugger
    120     Create();
    121 
    122     static lldb::SBDebugger
    123     Create(bool source_init_files);
    124 
    125     static lldb::SBDebugger
    126     Create(bool source_init_files, lldb::LogOutputCallback log_callback, void *baton);
    127 
    128     static void
    129     Destroy (lldb::SBDebugger &debugger);
    130 
    131     static void
    132     MemoryPressureDetected();
    133 
    134     SBDebugger();
    135 
    136     SBDebugger(const lldb::SBDebugger &rhs);
    137 
    138     ~SBDebugger();
    139 
    140     bool
    141     IsValid() const;
    142 
    143     void
    144     Clear ();
    145 
    146     void
    147     SetAsync (bool b);
    148 
    149     bool
    150     GetAsync ();
    151 
    152     void
    153     SkipLLDBInitFiles (bool b);
    154 
    155     void
    156     SetInputFileHandle (FILE *f, bool transfer_ownership);
    157 
    158     void
    159     SetOutputFileHandle (FILE *f, bool transfer_ownership);
    160 
    161     void
    162     SetErrorFileHandle (FILE *f, bool transfer_ownership);
    163 
    164     FILE *
    165     GetInputFileHandle ();
    166 
    167     FILE *
    168     GetOutputFileHandle ();
    169 
    170     FILE *
    171     GetErrorFileHandle ();
    172 
    173     lldb::SBCommandInterpreter
    174     GetCommandInterpreter ();
    175 
    176     void
    177     HandleCommand (const char *command);
    178 
    179     lldb::SBListener
    180     GetListener ();
    181 
    182     void
    183     HandleProcessEvent (const lldb::SBProcess &process,
    184                         const lldb::SBEvent &event,
    185                         FILE *out,
    186                         FILE *err);
    187 
    188     lldb::SBTarget
    189     CreateTarget (const char *filename,
    190                   const char *target_triple,
    191                   const char *platform_name,
    192                   bool add_dependent_modules,
    193                   lldb::SBError& sb_error);
    194 
    195     lldb::SBTarget
    196     CreateTargetWithFileAndTargetTriple (const char *filename,
    197                                          const char *target_triple);
    198 
    199     lldb::SBTarget
    200     CreateTargetWithFileAndArch (const char *filename,
    201                                  const char *archname);
    202 
    203     lldb::SBTarget
    204     CreateTarget (const char *filename);
    205 
    206     %feature("docstring",
    207     "Return true if target is deleted from the target list of the debugger."
    208     ) DeleteTarget;
    209     bool
    210     DeleteTarget (lldb::SBTarget &target);
    211 
    212     lldb::SBTarget
    213     GetTargetAtIndex (uint32_t idx);
    214 
    215     uint32_t
    216     GetIndexOfTarget (lldb::SBTarget target);
    217 
    218     lldb::SBTarget
    219     FindTargetWithProcessID (pid_t pid);
    220 
    221     lldb::SBTarget
    222     FindTargetWithFileAndArch (const char *filename,
    223                                const char *arch);
    224 
    225     uint32_t
    226     GetNumTargets ();
    227 
    228     lldb::SBTarget
    229     GetSelectedTarget ();
    230 
    231     void
    232     SetSelectedTarget (lldb::SBTarget &target);
    233 
    234     lldb::SBSourceManager
    235     GetSourceManager ();
    236 
    237     // REMOVE: just for a quick fix, need to expose platforms through
    238     // SBPlatform from this class.
    239     lldb::SBError
    240     SetCurrentPlatform (const char *platform_name);
    241 
    242     bool
    243     SetCurrentPlatformSDKRoot (const char *sysroot);
    244 
    245     // FIXME: Once we get the set show stuff in place, the driver won't need
    246     // an interface to the Set/Get UseExternalEditor.
    247     bool
    248     SetUseExternalEditor (bool input);
    249 
    250     bool
    251     GetUseExternalEditor ();
    252 
    253     static bool
    254     GetDefaultArchitecture (char *arch_name, size_t arch_name_len);
    255 
    256     static bool
    257     SetDefaultArchitecture (const char *arch_name);
    258 
    259     lldb::ScriptLanguage
    260     GetScriptingLanguage (const char *script_language_name);
    261 
    262     static const char *
    263     GetVersionString ();
    264 
    265     static const char *
    266     StateAsCString (lldb::StateType state);
    267 
    268     static bool
    269     StateIsRunningState (lldb::StateType state);
    270 
    271     static bool
    272     StateIsStoppedState (lldb::StateType state);
    273 
    274     bool
    275     EnableLog (const char *channel, const char ** types);
    276 
    277     void
    278     SetLoggingCallback (lldb::LogOutputCallback log_callback, void *baton);
    279 
    280     void
    281     DispatchInput (const void *data, size_t data_len);
    282 
    283     void
    284     DispatchInputInterrupt ();
    285 
    286     void
    287     DispatchInputEndOfFile ();
    288 
    289     void
    290     PushInputReader (lldb::SBInputReader &reader);
    291 
    292     void
    293     NotifyTopInputReader (lldb::InputReaderAction notification);
    294 
    295     bool
    296     InputReaderIsTopReader (const lldb::SBInputReader &reader);
    297 
    298     const char *
    299     GetInstanceName  ();
    300 
    301     static SBDebugger
    302     FindDebuggerWithID (int id);
    303 
    304     static lldb::SBError
    305     SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name);
    306 
    307     static lldb::SBStringList
    308     GetInternalVariableValue (const char *var_name, const char *debugger_instance_name);
    309 
    310     bool
    311     GetDescription (lldb::SBStream &description);
    312 
    313     uint32_t
    314     GetTerminalWidth () const;
    315 
    316     void
    317     SetTerminalWidth (uint32_t term_width);
    318 
    319     lldb::user_id_t
    320     GetID ();
    321 
    322     const char *
    323     GetPrompt() const;
    324 
    325     void
    326     SetPrompt (const char *prompt);
    327 
    328     lldb::ScriptLanguage
    329     GetScriptLanguage() const;
    330 
    331     void
    332     SetScriptLanguage (lldb::ScriptLanguage script_lang);
    333 
    334     bool
    335     GetCloseInputOnEOF () const;
    336 
    337     void
    338     SetCloseInputOnEOF (bool b);
    339 
    340     lldb::SBTypeCategory
    341     GetCategory (const char* category_name);
    342 
    343     lldb::SBTypeCategory
    344     CreateCategory (const char* category_name);
    345 
    346     bool
    347     DeleteCategory (const char* category_name);
    348 
    349     uint32_t
    350     GetNumCategories ();
    351 
    352     lldb::SBTypeCategory
    353     GetCategoryAtIndex (uint32_t);
    354 
    355     lldb::SBTypeCategory
    356     GetDefaultCategory();
    357 
    358     lldb::SBTypeFormat
    359     GetFormatForType (lldb::SBTypeNameSpecifier);
    360 
    361     lldb::SBTypeSummary
    362     GetSummaryForType (lldb::SBTypeNameSpecifier);
    363 
    364     lldb::SBTypeFilter
    365     GetFilterForType (lldb::SBTypeNameSpecifier);
    366 
    367     lldb::SBTypeSynthetic
    368     GetSyntheticForType (lldb::SBTypeNameSpecifier);
    369 
    370 }; // class SBDebugger
    371 
    372 } // namespace lldb
    373