Skip to content

Instantly share code, notes, and snippets.

@cbartlett
Created October 7, 2019 20:53
Show Gist options
  • Save cbartlett/591dd9091a9753216348a5367efcf2f0 to your computer and use it in GitHub Desktop.
Save cbartlett/591dd9091a9753216348a5367efcf2f0 to your computer and use it in GitHub Desktop.
Prints out a list of the all the ruby exceptions in your app
# thanks to http://blog.nicksieger.com/articles/2006/09/06/rubys-exception-hierarchy/
exceptions = []
tree = {}
ObjectSpace.each_object(Class) do |cls|
next unless cls.ancestors.include? Exception
next if exceptions.include? cls
next if cls.superclass == SystemCallError # avoid dumping Errno's
exceptions << cls
cls.ancestors.delete_if {|e| [Object, Kernel].include? e }.reverse.inject(tree) {|memo,cls| memo[cls] ||= {}}
end
indent = 0
tree_printer = Proc.new do |t|
t.keys.sort { |c1,c2| c1.name <=> c2.name }.each do |k|
space = (' ' * indent); space ||= ''
puts space + k.to_s
indent += 2; tree_printer.call t[k]; indent -= 2
end
end
tree_printer.call tree
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment