JavaScriptデバッグツールJSDT

最近Eclipseでのデバッグがマイブームで、何かJSのデバッグができるプラグインはないかと探していたら、JSDTというのを見つけました。
実際普段のデバッグではFirebugのステップ実行で十分なのですが、Eclipseでステップ実行とかしたら気持ちいいかと思い、、、。
まずは、上述サイトのアップデートサイトURLを使ってインストール。
http://jsdt.googlecode.com/svn/trunk/org.ayound.js.debug.update
次に、Eclipseの実行>デバッグの構成、でJavascriptDebugを選択し、左上の新規作成アイコンをクリックして新規構成を作ります。
JSDTのデバッグでは、JSDTがプロキシサーバーの役割を果たすようで、URLはhttpから始まる絶対パスを記述します。
ポートはデフォルトの8088をそのまま使用。ブラウザーの欄に適宜ブラウザパスを設定します。
これでデバッグボタンをクリックすると、先程設定したブラウザでURLが開かれ、デバッグが開始されます。
パースペクティブをJSDTにしてブレークポイントを張れば止まるのでしょう。(未確認)
ですが、どうもいまひとつ使い方が判りません。
文字コードを設定し挙げても日本語(UTF-8)のページが文字化けするようです。
実行すると外部サーバーのJSファイルも含め、全てのJSを開いてしまうのも不便です。
外部のものをリモートデバッグできるのはある意味便利かもしれないのですが、、、
もう少し使ってみようかとも思うのですが、Firebugで十分かな、、、

PDT2.0+XDebugでリモートデバッグ(その2)

PDT2.0+Xdebugでデバッグに引き続いて、Eclipseの設定です。
以下、日本語化したメニュー項目で記載します。
まずは、Eclipseの、設定 > PHP で、PHPサーバーPHP実行可能ファイル、の2項目を適宜設定します。この時、PHPデバッガーの項目で、XDebugを選択します。
次に、設定 > PHP > デバッグの、PHPデバッガー欄でXDebugを選択します。
これでデバッガの設定ができました。最後に実際のデバッガ構成の設定です。
Eclipseメニューの、設定 > 実行 > デバッグの構成、をクリックしてデバッグ構成ダイアログを表示します。
ここで、左のメニューで、PHP Webページを選択し左上の「新規の起動構成」をクリックして新規構成を選択します。

  • サーバー・デバッガー:XDebug
  • PHPサーバー:先程設定したサーバー

を選択します。

デバッグ構成

デバッグ構成

「ファイル」の欄は実行ファイルを直接指定できますが、今回はCakePHPでのデバッグをしますので、アプリのルートとなるURLとして「/」を入力しました。ブラウザでアクセスできるURL形式で指定します。
ここで、「ファイルが存在しません」と×マークが出ますが、気にしなくてOKです。
また、CakePHPのようなフレームワークの場合、「最初の行でブレーク」はチェックをはずした方がよいでしょう。(でないと自分設定したブレークポイントに行き着くまでにかなりのステップが必要になります)
あとは、Eclipseのカブトムシアイコンから先程作った設定を選択して実行すれば、設定したブレークポイントでとまってくれます。
終了ボタンをクリックするまではデバッグモードが続いていますので、画面遷移やフォーム送信など行って、実際の処理の中でステップ実行ができます。
今まで、fireCakeやfirePHPを使って変数のチェックなどをしていましたが、格段にやりやすくなった気がします。
また、ステップインしていくことでコアライブラリの中で何が行われているのかを見ることもできるので、コアライブラリの挙動の理解にもつながった気がします。

PDT2.0+XDebugでリモートデバッグ(その1)

PDT2.0+Xdebugでデバッグ環境を構築してみようと思います。
思い立ったきっかけは、普段使っているCakePHPでのデバッグに役立てたいためです。
今回は

  • Windows-7 64bit
  • Eclipse3.4
  • PDT2.0
  • Apache2.0.63
  • PHP5.2.9-2

という環境がすでに整っているところから始めます。

まずは、Xdebugのダウンロードページからバージョンにあったものをダウンロードします。
最適なバージョンがわからない場合、実行環境のサーバー上でphpinfo();を実行し、そのHTMLソースをインストラクションのページのテキストボックス貼り付けて、Analyse my phpinfo() output をクリックすると、最適なバイナリバージョンが提示されます。
なお、今回OSはWindows7の64bitですが、PHP自体は32bit用(5.2.9までは64bit版はない?)がインストールされているので、ここでも32bit用のバイナリを選択しました。
※今回、上記のインストラクションのページでXdebug 2.1.0rc1 が提示されたのですが、これをインストールしてみると変数が表示されないという問題があり、最終的に2.0.4を使うことになりました。こちら詳細が記載されているようです。(PDT2.0のバグのようです)

つづいて、php.iniの設定
以下をphp.iniに追記ましす。

[xdebug]
zend_extension_ts="C:\PHP\ext\php_xdebug-2.0.3-5.2.5.dll"
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_mode=req
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_log="C:\Program Files (x86)\Apache Group\Apache2\logs\xdebug.log"
xdebug.manual_url = "http://jp2.php.net"
;xdebug.collect_params = On
;xdebug.dump.GET = *
;xdebug.dump.POST = *

これでデバッグの準備ができました。
Eclipseの設定・実行手順いついては次回に書きたいと思います。

Eclipse上でXdebugによるデバッグ

Eclipse上でXdebugによるデバッグ環境を整えたのですが、かなりてこずったので備忘録的に。
実際のインストール・設定はのちほど書こうと思います。
で、どこではまったかというと、今回2台の端末でそれぞれ同じ環境構築をしたのですが、なぜか1台だけでeclipseのデバッグボタンを押しても、うんともすんともいいません。で、eclipseのログ(ワークスペース配下の.metadata/.log)を見てみたのですが、なんのこっちゃ的な内容でわかりません。次にApacheのerror.logを見たのですがこちらは何もありません。今度はwindowsのシステムログを見てみたりしたのですがこちらもそれらしいものはありません。
で、xdebug.log(php.iniで設定)を見てみると、ファイルが出力されているのでデバッグは実行されているのかな?
そこで、デバッグ用のポートがふさがっているのでは?と考え、コマンドプロンプトで netstat -ano を叩いてみると、正常にデバッグできる端末と比較して違いが。
正常な方は9000,9980,10000のポートを同じPIDが使用しているのですが、デバッグできない方は10000だけ他のPIDに割り振られています。
(9000はXdebug、10000はzendDebuggerが使用するポートです。9980はは不明)
そもそも、このPIDはなんぞや、を調べるために、コマンドプロンプトで tasklistを叩いてみます。(tasklistはタスク一覧を表示するコマンドのようです。)9000,9980 はEclipseが使っていたのですが、10000をAgentsvc.exeというプロセスが使用している模様。
Agentsvc.exeって何?と思いググって見ると、どうやらMSOfficeのイルカ君らしい。なんじゃそりゃ、、、。で早速タスクマネージャでこのサービスを終了させてEclipseを起動するとめでたくリモートデバッグが実行されました。感動的、、、
でも、ブレークポイントでとまっているのですが変数が表示されません、、、、何で?
Read more »

IEのソースを表示に使うアプリを規定に戻す

いろいろなところで書かれていますが、自分の場合なかなか戻せずに苦労したので覚え書き。
IE8.0の「ソースを表示」に使用するアプリは、開発者ツールの中の、ファイル > InternetExplorer ソースの表示のカスタマイズ で設定でいるのですが、これが戻らなくなる不具合があるようです。
ググって見ると下記のレジストリキー
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name

を削除することで規定に戻る、とあるのですが、自分の場合これを行っても戻らず苦労しました。
そこでregedit内で、キー名で「view source editor」を検索してみると、下記のようなキーができていました。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\View Source Editor

そこでこのキーごと削除してみると見事元に戻りました。
そもそもこのキーが何なのかは不明ですが、、、

開発用SSL環境の構築

開発用にSSL環境を作る必要にせまられ、オレオレ証明書でテスト環境を作ってみました。
Apache 2.0.63 + OpenSSL (2.2あたりとはconfファイルの配置に違いがあるようですが)

こちらのサイトを参考にさせていただきました。

まずは、OpenSSLを使ってオレオレ証明書を作ります。
今回はOpenSSL付属のApacheが入っていたのでそれを使います。(ない場合別途落としてきます)
OpenSSLはApacheディレクトリのなかのbinにあります。

##パスを通します
> cd C:\Program Files (x86)\Apache Group\Apache2\conf
> path %PATH%; C:\Program Files (x86)\Apache Group\Apache2\bin

## キーファイルの作成
> openssl genrsa -rand charset.conv -out server.key 1024

## CSRの作成
> openssl req -new -key server.key -out server.csr -config ..\openssl.cnf

## 以下コマンドラインの対話
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:kanagawa
Locality Name (eg, city) []:kamakura
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ceed
Organizational Unit Name (eg, section) []:ceed
Common Name (eg, YOUR name) []:localhost
Email Address []:test@localhost

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

## CRTファイルの作成
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

##以上で、server.csr, server.crt, server.key が作成される

httpd.conf の編集

#モジュールの読み込み
LoadModule ssl_module modules/mod_ssl.so

ssl.conf の編集

#SSLCertificateFile conf/ssl.crt/server-dsa.crt
SSLCertificateFile conf/server.crt

#SSLCertificateKeyFile conf/ssl.key/server-dsa.key
SSLCertificateKeyFile conf/server.key

DocumentRoot "/path/to/root"

<Directory "/path/to/root">
    SSLOptions +StdEnvVars
</Directory>

レジストリの設定
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Apache2

“C:\Program Files (x86)\Apache Group\Apache2\bin\Apache.exe” -k runservice
    ↓
“C:\Program Files (x86)\Apache Group\Apache2\bin\Apache.exe” -D SSL -k runservice

以上で設定は完了です。
サービスからApacheの再起動を行えばSSLが使えるようになるはずです。
もし正常に起動できない場合は、ポート443が塞がっていないか確認しましょう。(VPN ServerやSkypeなどが使用している場合があります)
コマンドラインから
netstat -ano
で確認できます。
0.0.0.0:443 になんらかの接続がある場合、そのPIDを調べて、該当するプロセスを終了します。
正常に起動すれば、SSLによって上記ポートがListenされます。

CakeErrorの仕様

app_error.phpを作って独自のメソッドを書くと、エラーハンドリングコンポーネントに独自のエラー処理を追加できる、とドキュメントにも書いてあるが、debugを0にするとなぜかどのエラーも全て、Error404が呼ばれてしまう。散々あれこれ試して解決できずググって見ると、/Cake/libs/error.phpのコンストラクタのなかで、debugが0だったら、error, error404, 500 のどれかになるように処理が書いてある、との事。こんなのありか?何のためのapp_errorなの?

chromeで謎のJSエラー

他社制作のJSでChromeに限って謎のエラーが出てはまったので備忘録。
他のブラウザでは全く問題の出ないスクリプトなのに、何故かChromeだけで
Unexpected token
というエラーが出ていた。ChromeのJavascriptコンソールでエラー行表示ををクリックしても当該の場所を表示できない。おまけにScriptsタブでそのJSを選択しようとしても選択できない。(これらはJSファイルの行数が膨大だったせいかも、、、)
それで地道に調べていったところ、なんとエラーの原因はコメント行だった。日本語のコメントが何箇所かありその中の1つがエラーとなっていた。こんなことあるんだね。ちなみにJSの文字コードはShift_JISでした。

Firebug1.5のbug?

firebugが1.5になったようですね。
早速アップデートしてみたのですが、「要素を調査」が効かないようで、HTMLパネルのカーソルアイコンを使っても、要素を検証できません。僕の環境だけの問題なのかな?
とりあえず、この辺
http://getfirebug.com/releases/firebug/1.4X/
から、1.45に戻して暫定対応。
同じ状況の人いるのかな、、、、

ヘルパーの読み込みエラー

ヘルパーの読み込みで何度かはまったので覚え書き。
例えば下記のような記述を、app_controller.phpに書いている場合

var $helpers = array('Html', 'Form', 'Firecake', 'Markup');

markup.phpの配置を忘れてしまった場合、markuphelperが見つからないとエラーが出そうなものだが、実際には存在するはずの、「firecakehelperが無い」というエラーが出る。
これは、各viewの中でmarkuphelperを呼ぶ前に、/app/view/layout/default.ctpの中でfirecakeを呼んでいるためにおこるようだ。
「firecakehelperが無い」というエラーが出ているので、そちらばかり気にしていると、実は別のところに問題がある。
ちなみに、Html やForm ヘルパーに対してのエラーメッセージとはならない。
おそらくデフォルトで読み込まれるヘルパー以外のもので最初のものに対してのエラーとなるのだろう。
これって仕様としてどうなんだ、、、、

getting health insurance in new york buy clomid online UK major health insurance companies buy levitra uk online what are wells fargo hours buy finasteride affordable health insurance for children accutane no prescription medical center of trinity viagra online uten resept midwestern university wellness center dapoxetine top individual health insurance companies viagra ireland