タグ「debug」が付けられているもの

MAMPとMacGDBpでPHPスクリプトのデバッグ環境を構築する

  • 投稿日:
  • by
  • カテゴリ:

少し前に「MAMPにMTをインストールする際のメモ」という記事を書きましたが、今回はそこで書き忘れたPHPのデバッグ環境の構築について書いてみたいと思います。

MacGDBpのインストール

PHPスクリプトをリモートデバッグするには MacGDBpという、XdebugのGUIフロントエンドを使用します。ダウンロード、アーカイブ展開後、MacGDBp本体をアプリケーションフォルダにコピーするだけです。

Xdebugのインストール

次にサーバ側にXdebugエクステンションをインストールします。XdebugのバイナリパッケージがActiveStateにありますのでこれを利用します。Komodo Debugger Extensionsから"Komodo 5.1 Remote Debugging Packages"の欄にある"PHP Remote Debugging / Mac OS X"をダウンロードし、展開します。

展開するとPHPのバージョンごとにエクステンションがありますので、MAMPで使用しているPHPのバージョン(MAMP 1.7.2の場合はPHP 5.2.6)にあわせてエクステンション(xdebug.so)を選択し、以下の場所へコピーします。

$ cd 5.2
$ cp xdebug.so /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922

Xdebugの設定

Xdebugを使えるようにするには、/Applications/MAMP/conf/php5/php.iniを編集し、
以下の設定をファイルの最後へ追加します。

[xdebug]
zend_extension="/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1

また、Zend Optimizerを無効にするため、以下の行の先頭にセミコロンを入れ、コメントにします。

zend_extension_manager.optimizer=/Applications/MAMP/bin/php5/zend/lib/Optimizer-3.3.3

MacGDBpでスクリプトをデバッグする

MacGDBpを起動すると、デバッガ画面が開きます。この状態で、デバッグしたいページをブラウザからアクセスすると、ブラウザ上には何も表示されませんが、MacGDBpでは次のような画面になり、スクリプトの先頭で停止します。

macgdbp_debugger.jpg

画面上部左側では、変数の内容を確認できます。

スクリプトを任意の場所で停止したい場合は、Breakpointsウィンドウを開き、画面下部の「+」をクリックしてスクリプトを指定し、画面上部に表示されたスクリプトから停止させたい箇所の行番号部分をクリックします。

macgdbp_break.jpg

これでPHPスクリプトのデバッグが出来るようになり、ダイナミックパブリッシングに対応したMTプラグインの開発効率が上がるはず(?)です。

今回もMTのデバッグネタです。 先日、弊社のプラグインをインストールしたところうまく動かない、というお客様がいらっしゃいました。手元の環境では問題なく動作していますが、お客様の管理画面にアクセスして調べてみると、やはりうまく動作してません。サーバのシェルにアクセスして調べようにも、お客様が契約されたレンタルサーバでは、シェルでのアクセスが出来ない環境でした。 こういう状況で使えるのが "PerlScript プラグイン":http://bradchoate.com/weblog/2002/07/27/mtperlscript です。このプラグインは、テンプレート内にPerlのスクリプトを記述できるようにするもので、再構築時にスクリプトを実行し、その結果を出力します。 プラグインには2つスクリプトが同梱されていて、それぞれ指定された場所へインストールするようドキュメントに書かれていますが、私は以下のようにファイルを配置し、プラグインディレクトリへコピーしました。 ==
    PerlScript
    |-- lib
    |   `-- bradchoate
    |       `-- perlscript.pm
    `-- perlscript.pl
== 使い方は、テンプレートにPerlスクリプトを記述し、MTPerlScriptタグで囲うだけです。 例として、MTのコンフィグをダンプするスクリプトを書くと以下のようになります。 ==
<MTPerlScript>
require MT;
require YAML;
print YAML::Dump(MT::config);
</MTPerlScript>
== 1つのテンプレートの中にMTPerlScriptタグをいくつも置くこともできます。 ==
<MTPerlScript>
print "begining of template";
</MTPerlScript>

<MTPerlScript>
print "end of template";
</MTPerlScript>
== サブルーチンを定義することも出来ます。 ==
<MTPerlScript package="mylib" once="1">
sub log {
  my ($str) = @_;
  print "<p>log: $str</p>\n";
}
</MTPerlScript>

<MTPerlScript>
mylib::log("middle of template");
</MTPerlScript>
== 作成したテンプレートを再構築し、出力内容を確認するという手順を繰返して、デバッグします。 かなり便利かつ強力なプラグインですが、その反面、テンプレートの編集権限さえあれば、何でも出来てしまう危険なプラグインでもありますので、取り扱いにはご注意ください。

MTプラグインの簡単なデバッグ方法

  • 投稿日:
  • by
  • カテゴリ:

以前、

MovableType のプラグインをperl debuggerでデバッグする (エムロジック放課後プロジェクト)

このエントリで、perl debuggerを使ったデバッグの仕方を書きました。この中で、

Movable Type のプラグインをデバッグする方法というと、ログにメッセージや変数を出力する、いわゆる「printfデバッグ」になると思います。

と触れられている、いわゆる「printfデバッグ」について、今回は書いてみたいと思います。