diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 | 
| commit | 14f1b3e8826ce43b978db93a62d1166055db5394 (patch) | |
| tree | 0a00ad8d3498783fe0193f3b656bca17c4c8697d /examples/python/globals.py | |
| parent | 4ee8c119c71a06dcad1e0fecc8c675e480e59337 (diff) | |
Notes
Diffstat (limited to 'examples/python/globals.py')
| -rwxr-xr-x | examples/python/globals.py | 74 | 
1 files changed, 54 insertions, 20 deletions
| diff --git a/examples/python/globals.py b/examples/python/globals.py index fb2739c8b69c..43bd915b3933 100755 --- a/examples/python/globals.py +++ b/examples/python/globals.py @@ -15,58 +15,92 @@ import os  import shlex  import sys +  def get_globals(raw_path, options):      error = lldb.SBError()      # Resolve the path if needed      path = os.path.expanduser(raw_path)      # Create a target using path + options -    target = lldb.debugger.CreateTarget(path, options.arch, options.platform, False, error) +    target = lldb.debugger.CreateTarget( +        path, options.arch, options.platform, False, error)      if target:          # Get the executable module          module = target.module[target.executable.basename]          if module:              # Keep track of which variables we have already looked up              global_names = list() -            # Iterate through all symbols in the symbol table and watch for any DATA symbols +            # Iterate through all symbols in the symbol table and watch for any +            # DATA symbols              for symbol in module.symbols:                  if symbol.type == lldb.eSymbolTypeData: -                    # The symbol is a DATA symbol, lets try and find all global variables  +                    # The symbol is a DATA symbol, lets try and find all global variables                      # that match this name and print them                      global_name = symbol.name                      # Make sure we don't lookup the same variable twice                      if global_name not in global_names:                          global_names.append(global_name)                          # Find all global variables by name -                        global_variable_list = module.FindGlobalVariables (target, global_name, lldb.UINT32_MAX) +                        global_variable_list = module.FindGlobalVariables( +                            target, global_name, lldb.UINT32_MAX)                          if global_variable_list:                              # Print results for anything that matched                              for global_variable in global_variable_list: -                                print 'name = %s' % global_variable.name    # returns the global variable name as a string -                                print 'value = %s' % global_variable.value  # Returns the variable value as a string +                                # returns the global variable name as a string +                                print 'name = %s' % global_variable.name +                                # Returns the variable value as a string +                                print 'value = %s' % global_variable.value                                  print 'type = %s' % global_variable.type    # Returns an lldb.SBType object -                                print 'addr = %s' % global_variable.addr    # Returns an lldb.SBAddress (section offset address) for this global -                                print 'file_addr = 0x%x' % global_variable.addr.file_addr    # Returns the file virtual address for this global -                                print 'location = %s' % global_variable.location    # returns the global variable value as a string -                                print 'size = %s' % global_variable.size    # Returns the size in bytes of this global variable +                                # Returns an lldb.SBAddress (section offset +                                # address) for this global +                                print 'addr = %s' % global_variable.addr +                                # Returns the file virtual address for this +                                # global +                                print 'file_addr = 0x%x' % global_variable.addr.file_addr +                                # returns the global variable value as a string +                                print 'location = %s' % global_variable.location +                                # Returns the size in bytes of this global +                                # variable +                                print 'size = %s' % global_variable.size                                  print +  def globals(command_args):      '''Extract all globals from any arguments which must be paths to object files.'''      usage = "usage: %prog [options] <PATH> [PATH ...]" -    description='''This command will find all globals in the specified object file and return an list() of lldb.SBValue objects (which might be empty).''' -    parser = optparse.OptionParser(description=description, prog='globals',usage=usage) -    parser.add_option('-v', '--verbose', action='store_true', dest='verbose', help='display verbose debug info', default=False) -    parser.add_option('-a', '--arch', type='string', metavar='arch', dest='arch', help='Specify an architecture (or triple) to use when extracting from a file.') -    parser.add_option('-p', '--platform', type='string', metavar='platform', dest='platform', help='Specify the platform to use when creating the debug target. Valid values include "localhost", "darwin-kernel", "ios-simulator", "remote-freebsd", "remote-macosx", "remote-ios", "remote-linux".') +    description = '''This command will find all globals in the specified object file and return an list() of lldb.SBValue objects (which might be empty).''' +    parser = optparse.OptionParser( +        description=description, +        prog='globals', +        usage=usage) +    parser.add_option( +        '-v', +        '--verbose', +        action='store_true', +        dest='verbose', +        help='display verbose debug info', +        default=False) +    parser.add_option( +        '-a', +        '--arch', +        type='string', +        metavar='arch', +        dest='arch', +        help='Specify an architecture (or triple) to use when extracting from a file.') +    parser.add_option( +        '-p', +        '--platform', +        type='string', +        metavar='platform', +        dest='platform', +        help='Specify the platform to use when creating the debug target. Valid values include "localhost", "darwin-kernel", "ios-simulator", "remote-freebsd", "remote-macosx", "remote-ios", "remote-linux".')      try:          (options, args) = parser.parse_args(command_args)      except:          return -     +      for path in args: -        get_globals (path, options) -     +        get_globals(path, options) +  if __name__ == '__main__':      lldb.debugger = lldb.SBDebugger.Create() -    globals (sys.argv[1:]) - +    globals(sys.argv[1:]) | 
