# http://teethgrinder.co.uk/perm.php?a=Python-memory-leak-detector
import gc
import inspect


def dump():
	# force collection
	print("\nCollecting GARBAGE:")
	gc.collect()
	# prove they have been collected
	print("\nCollecting GARBAGE:")
	gc.collect()

	print("\nGARBAGE OBJECTS:")
	for x in gc.garbage:
		s = str(x)
		if len(s) > 80:
			s = "%s..." % s[:80]

		print("::", s)
		print("		type:", type(x))
		print("   referrers:", len(gc.get_referrers(x)))
		try:
			print("	is class:", inspect.isclass(type(x)))
			print("	  module:", inspect.getmodule(x))

			lines, line_num = inspect.getsourcelines(type(x))
			print("	line num:", line_num)
			for l in lines:
				print("		line:", l.rstrip("\n"))
		except Exception:
			pass

		print()
