die しても Sledge::Plugin::DebugScreen で出しましょう - にぽたん研究所

December 12, 2005

このエントリーをはてなブックマークに追加
ド派手なデバグスクリーンを表示させる【Sledge::Plugin::DebugScreen】(2181) - MF::TokuLog
Catalyst, SubWay, Rails などのモダーンな Framework では、デバッグモードで Internal Server Error が起きるとスタックトレースなどをド派手な HTML で表示してデバッグを助けるような仕組みを持っています。

But, Sledge にはそれが無い!なんてこった!この事実がバレる前にはやくその機能をつけないと!

つーわけで、Sledge::Plugin::DebugScreen とかいうものを作ってみました。
で、Sledge::Plugin::DebugScreen なかなかド派手で気に入ったんですが、
MoFedge::Plugin::TokuLog! - Perl で StackTrace とりたい
Sledge::Plugin::DebugScreen だと Sledge::Exceptions を投げた場合にはスタックトレースとれるんですが、単に die した場合に取れないんですよねぇ。。。
ってことで、die した時でもド派手 + StackTrace 付きにしてみました。

いや、ちょちょっと追加しただけなので、patch で。
--- DebugScreen.pm	Mon Dec 12 15:33:22 2005
+++ DebugScreen.pm	Mon Dec 12 16:09:20 2005
@@ -1,9 +1,10 @@
 package Sledge::Plugin::DebugScreen;
 use strict;
 use warnings;
-our $VERSION = '0.01';
+our $VERSION = '0.02';
 
 use Template;
+use Devel::StackTrace;
 
 our $TEMPLATE = q{
 <?xml version="1.0" encoding="euc-jp"?>
@@ -73,9 +74,9 @@
                    </tr>
                    [% FOR s IN stacktrace -%]
                        <tr>
-                           <td>[% s.pkg  | html %]</td>
-                           <td>[% s.line | html %]</td>
-                           <td>[% s.file | html %]</td>
+                           <td>[% (s.pkg  || s.package)   | html %]</td>
+                           <td>[%  s.line                 | html %]</td>
+                           <td>[% (s.file || s.filename)  | html %]</td>
                        </tr>
                    [%- END %]
                </table>
@@ -88,7 +89,10 @@
 sub import {
    my $self = shift;
    my $pkg  = caller;
-
+   local $pkg::SIG{__DIE__} = sub {
+       &_handle_exception($self, @_);
+       die @_;
+   };
    no strict 'refs';
    *{"$pkg\::handle_exception"} = \&_handle_exception;
 }
@@ -102,7 +106,8 @@
            desc  => "$E",
            pages => $self,
        };
-       $vars->{stacktrace} = $E->stacktrace if $E->can('stacktrace');
+       $vars->{stacktrace} = $E->can('stacktrace') ?
+           $E->stacktrace : [Devel::StackTrace->new->frames];
 
        my $tmpl = Template->new;
        my $output;
die の時は Devel::StackTrace とかが使われるようになってます。

はてな CTO の伊藤さんが
naoyaのはてなダイアリー - いいもの使ってる感
こういう本ちゃんの機能とはあんまり関係ない部分、例えばルック & フィールの作り込みみたいなのは、一見どうでもいいようで割と重要なんじゃないなあと思います。
Movable Type は管理画面のデザインが洗練されてて、機能も StyleCatcher とか散りばめられたギミックとかがいちいちかっこよくて使ってるだけでなんか気分が良くなる風があります。こういうのを「いいもの使ってる感」とか呼んでます。

と、ルック & フィールの重要性を「いいもの使ってる感」というわかりやすい砕けた表現であらわしてます。
なるほど。
よくわかる気がします。
その点に関しては「10 分で (ry」をご覧になればわかる通り、チープなフィーリングに完璧慣らされてしまっていたので、こういうのを改めて取り入れてみると「あ、いいかもな」って気になれます。

これで、日頃ほとんどよくないもの使ってる感を感じていた Sledge ユーザーの皆様方も、やっといいもの使ってる感を満喫出来ますね。

あれ、極端だったかな。。。


いあ、%SIG とか数年振りに使った。

nipotan at 16:29 | Comments(0) | TrackBack(2) | 技術 
このエントリーをはてなブックマークに追加

Trackback URL for this entry

Trackbacks

1. die しても Sledge::Plugin::DebugScreen で出しましょう 2  [ にぽたん研究所 ]   December 12, 2005 20:11
さて「id:tokuhirom だけが支えている」と言われつつも、空前の Sledge ブームなわけですが、ちょうどさっきのエントリを書いてたら、id:tokuhirom が既に対応してたりしました…。 で、その後に MoFedge::Plugin::TokuLog! - StackTrace とソースコードhttp://tokuhirom.d...
はじめに Catalystで使える興味深いプラグインがリリースされました。そのプラグインとは、[http://search.cpan.org/~agrundma/Catalyst-Plugin-StackTrace-0.02/:title=Catalyst::Plugin::StackTrace]です。プラグインの名前から予想できるように、スタックトレースをデバ...

Post a comment

Name:
URL:
  Remember info?: Rate: Face    Star