def main(args=sys.argv): parser = optparse.OptionParser(prog="caulk", description="Tool to examine memory dumps.") parser.add_option("-d", "--debug", action='store_true', help="Break into debugger.") parser.add_option("-c", "--classes", action='store_true', help="Prints a list of classes the counts and total memory used.") parser.add_option("-D", "--diff", action='store_true', help="Compares two dump files, printing the difference.") parser.add_option("-r", "--references", help="Prints class references.") parser.add_option("-i", "--instances", help="Prints class instances.") parser.add_option("-s", "--stack", type='int', help="Print reference stack for a given instance.") (options, args) = parser.parse_args(args) # Remove the script name args = args[1:] if options.debug: import pdb; pdb.set_trace() if options.classes: if len(args) != 1: parser.error('You must provide one dump file in this mode.') with file(args[0], 'r') as f: dump = load(f) classes(dump) if options.diff: if len(args) != 2: parser.error('You must provide two dump files in this mode.') with file(args[0], 'r') as f: dump1 = load(f) with file(args[1], 'r') as f: dump2 = load(f) diff(dump1, dump2) if options.references: if len(args) != 1: parser.error('You must provide one dump file in this mode.') with file(args[0], 'r') as f: dump = load(f) references(dump, classes=(options.references, )) if options.instances: if len(args) != 1: parser.error('You must provide one dump file in this mode.') with file(args[0], 'r') as f: dump = load(f) instances(dump, classes=(options.instances, )) if options.stack: if len(args) != 1: parser.error('You must provide one dump file in this mode.') with file(args[0], 'r') as f: dump = load(f) stack(dump, id=options.stack)
def test_dump_load(self): f = StringIO() caulk.dump(f) f.seek(0) caulk.load(f)