ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 10 years ago

Closed 9 years ago

#2808 closed enhancement (fixed)

エラーページ表示時にSmarty Debug Consoleにバックトレースを表示してほしい

Reported by: tsukamoto Owned by: nobody
Priority: minor Milestone: OpenPNE2.13.2
Component: 指定しない Version:
Keywords: 2.13要望 Cc:

Description (last modified by kiwa)

■概要

■仕様

■関連情報

元のdescription

エラーページ表示時に、Smarty Debug Consoleにバックトレースを表示してほしいと思います。

エラーページは、複数のプロセスで、同じエラーページ表示になることがあります。この時の問題切り分けのため、エラーページ表示時には、Smarty Debug Consoleにバックトレースを表示してほしいと思います。

OpenPNE 2.12.1に対するパッチを添付します。

Attachments (1)

openpne_2.12.1_ticket2808_diff.txt (833 bytes) - added by tsukamoto 10 years ago.
Diff for 2.12.1 (trunk)

Download all attachments as: .zip

Change History (10)

Changed 10 years ago by tsukamoto

Diff for 2.12.1 (trunk)

comment:1 Changed 10 years ago by kiwa

Milestone: OpenPNE2.13.2

2.13.2で取り込み検討してほしいです

comment:2 Changed 10 years ago by ebihara

パッチの提供ありがとうございます。これは開発者にとってはすごくありがたい機能改善ですね。是非取り込ませていただきたいです。

Smarty Debug Console が表示される状態というのはほぼ開発時だと思うので、エラーページに限らず、(OPENPNE_DEBUGGING が 2 の状態に限り)すべてのページでバックトレースの結果をアサインしてしまってもいいかなとなんとなく思いついたのですが、これについてはどうお考えでしょうか?

また単にアサインするだけでなく、 webapp/templates/debug.tpl を書き換えてバックトレースを見やすく表示させてみても面白いかもしれませんね。

comment:3 Changed 10 years ago by tsukamoto

遅くなりました。

すべてのページでバックトレースの結果をアサインしてしまってもいいかなとなんとなく思いついたのですが、これについてはどうお考えでしょうか?

良いと思います。

ただ、パッチで行っているdebug_backtraceによるトレースの取得は、呼び出された場所から、直接の呼び出し元を上方向に辿るだけなので、成功時にcontroller.php内で呼んでも情報量がないですね。(a)うまい呼び出しタイミングがあるか、(b)debug_backtrace以外の(PNE独自の?)トレース情報を提供できれば、有効だと思います。

comment:4 Changed 9 years ago by kiwa

Description: modified (diff)
Keywords: 確認中 added

trunkにマージしました。descriptionの変更をどなたかにやってもらいたいです。

comment:5 Changed 9 years ago by ebihara

Keywords: テスト待ち added; 確認中 removed

comment:6 Changed 9 years ago by ebihara

Keywords: 差し戻し added; テスト待ち removed

OpenPNE_DB 内など、 $debug_backtrace が巨大になってしまう場合で openpne_display_error() をコールすると、 Smarty Debug Console の $debug_backtrace を出力していく際に、

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 206084 bytes) in /path/to/OpenPNE/lib/include/Smarty/plugins/modifier.debug_print_var.php on line 37

というエラーを出力してスクリプトの実行が停止してしまいます。

comment:7 Changed 9 years ago by ebihara

とりあえずの対処として、

  • 引数が配列もしくはオブジェクトの場合は、それを示す文字列に置換
  • クラスのメソッドをコールした場合に追加される object というキーの値が、そのクラスのインスタンスなので、この値をクラス名に置換

をおこないます。

comment:8 Changed 9 years ago by ebihara

Keywords: テスト待ち added; 差し戻し removed

r8182 で、引数が配列かオブジェクトだった場合、もしくは関数ではなくクラスメソッドであった場合にフィルタリングするよう変更しました。

r8183 で、相対パスへの変換を OPENPNE_DIR を用いておこなうよう変更しました。

comment:9 Changed 9 years ago by kiwa

Keywords: テスト待ち removed
Resolution: fixed
Status: newclosed

確認しました。問題ありません。

Note: See TracTickets for help on using tickets.