Title / Description
Code begin require 'gtksourceview' rescue LoadError else module Kernel alias __raise raise def raise(*args) __raise(*args) rescue Exception => exc exc.backtrace.shift exc.backtrace.each do |line| puts "\tfrom #{line}" end unless [ SystemExit, Interrupt ].include? exc.class Gtk::DebugDialog.new(exc) end end end end module Gtk class DebugDialog < MessageDialog def initialize(exc) super(nil, 0, ERROR, BUTTONS_CLOSE, "#{exc.class}: #{exc.message}") set_title(exc.class.to_s) set_resizable(true) set_secondary_text _("Congratulations, you found a bug in #{$APP}!") set_default_response(RESPONSE_CLOSE) signal_connect('response') { destroy } expander = Expander.new _("<b>Show _backtrace</b>"), true expander.use_markup = true expander.border_width = 6 expander.spacing = 0 vbox.pack_start(expander, true) vbox.spacing = 0 sw = ScrolledWindow.new sw.set_size_request(500, 300) expander << sw source = SourceView.new source.editable = false source.cursor_visible = false sw << source @buffer = source.buffer @buffer.language = SourceLanguagesManager.new.get_language('application/x-ruby') @buffer.highlight = true @buffer.create_tag('bold', 'weight' => Pango::FontDescription::WEIGHT_BOLD) @buffer.create_tag('monospace', 'family' => 'monospace') @buffer.create_tag('highlight', 'background' => '#eee') @buffer.create_tag('black', 'foreground' => 'black') @buffer.create_tag('hidden', 'foreground' => 'white') iter = @buffer.start_iter @buffer.insert(iter, "#{exc.class}: #{exc.message}\n", 'black', 'bold') exc.backtrace.each do |line| file, pos, message = line.split(':', 3) @buffer.insert(iter, 'from ', 'black') @buffer.insert(iter, file, 'black', 'bold') @buffer.insert(iter, ":\n line ", 'black') @buffer.insert(iter, "#{pos}", 'black', 'bold') @buffer.insert(iter, " #{message}\n", 'black') if File.exists?(file) lines = File.readlines(file) pos = pos.to_i - 1 next if pos.zero? [0, pos - 2].max.step(pos + 2) do |i| if pos == i @buffer.insert(iter, '%4d' % (i + 1), 'monospace', 'bold', 'highlight') @buffer.insert(iter, " #{lines[i]}", 'monospace', 'highlight') else @buffer.insert(iter, '%4d' % (i + 1), 'monospace', 'highlight') @buffer.insert(iter, " #{lines[i]}", 'monospace') end end @buffer.insert(iter, "\n") end end show_all run end end end
Author
Highlight as C C++ CSS Clojure Delphi ERb Groovy (beta) HAML HTML JSON Java JavaScript PHP Plain text Python Ruby SQL XML YAML diff code