home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

技術/Chrome/Remote Debugging Protocol (v1)

技術/Chrome/Remote Debugging Protocol (v1)

技術 / Chrome / Remote Debugging Protocol (v1)
id: 1365 所有者: msakamoto-sf    作成日: 2015-03-07 20:41:13
カテゴリ: Chrome JavaScript 

2015-03現在、Chromeではリモートデバッグ機能がある。スゴイ。
NetBeans7.4あたりを試した時に、HTML5プロジェクトのデバッグするとChromeが立ち上がり、NetBeans上からJSにブレークポイント設定できたりステップ実行できて「ナニコレすごい、どうなってるの?」と思ったものだが、どうもこの機能を使っているようだ。

参考:

chrome単体でもリモートデバッグを体験できる。Chromeに"--remote-debugging-port=NNNN"オプションをつけると、そのポート番号でDevTools画面を提供してくれるため、他のChromeから localhost:NNNN にアクセスするとDevTools画面が表示されデバッグできる。

1. まずchrome.exeがどこにあるか調べる。Winならタスクマネージャからchrome.exeのプロパティを開いてフルパスを確認する。
今日試してみたら、以下の場所にあった。

C:\Users\(ユーザ名)\AppData\Local\Google\Chrome\Application\chrome.exe

2. デバッグ対象のchromeを起動する。"--remote-debugging-port=NNNN" オプションを付けてあげる。また、"--user-data-dir=<some directory>" でユーザプロファイルを分離してあげるとクリーンな状態のChromeをデバッグ出来るので良さげ。
→コマンドプロンプトから起動してみる。

> cd C:\Users\(ユーザ名)\AppData\Local\Google\Chrome\Application
> chrome.exe --remote-debugging-port=9222  --user-data-dir=c:\work\temp\chrome-test-profile1

3. 起動したchromeウインドウで、試しに何かデバッグしたいWebサイトを読み込んでみる。

4. デバッガとして操作するChromeを起動し、"--remote-debugging-port" に指定したポートでlocalhostにアクセスしてみる。
上の例なら以下にアクセス:

http://localhost:9222/

→"Inspectable pages" という画面で、デバッグ対象chromeで表示しているタブ一覧が表示される。デバッグしたいタブをクリックすると、対応するDevTools画面が表示される。

実際のデバッグコマンドについては、WebSocketで接続してJSONメッセージをやりとりしている。
もし自分なりのデバッグクライアントを作りたい場合は、まずデバッグ対象のchromeを起動し、以下のURLで 4. の"Inspectable pages" の結果と同じJSONを取得する。

http://localhost:9222/json

→例:

[ {
   "description": "",
   "devtoolsFrontendUrl": "/devtools/devtools.html?ws=localhost:9222/devtools/page/AC37C271-FFCA-4B84-A731-0A66D36FAC48",
   "id": "AC37C271-FFCA-4B84-A731-0A66D36FAC48",
   "title": "Example Domain",
   "type": "page",
   "url": "http://www.example.com/",
   "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/AC37C271-FFCA-4B84-A731-0A66D36FAC48"
}, {
   "description": "",
   "devtoolsFrontendUrl": "/devtools/devtools.html?ws=localhost:9222/devtools/page/6590A241-CB03-4F2B-9584-11170006F771",
   "id": "6590A241-CB03-4F2B-9584-11170006F771",
   "title": "技術/HTTP/Fenix Web Server (静的ページ開発用ローカルWebサーバ) - Glamenv-Septzen.net",
   "type": "page",
   "url": "http://www.glamenv-septzen.net/view/1364",
   "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/6590A241-CB03-4F2B-9584-11170006F771"
} ]

→webSocketDebuggerUrlがRemote debugging protocolで規定されたデバッグメッセージをやりとりするWebSocketのURLなので、好きな言語・好きなWebSocketクライアントライブラリでアクセスし、JSONメッセージをやりとりする。

どんなメッセージがあり、どういう仕様かは冒頭の参考リンク、"Remote Debugging Protocol 1.1" で網羅されている。およそDevToolsでできることはひと通りできる。

オリジナルのデバッガを作りたい場合は冒頭の参考リンク、"Showcase Chrome Debugging Protocol Clients" を見ると良さそう。GitHubでソースが公開されているものも多い。複雑な凝ったものもあるが、以下のプロジェクトはシンプルなpythonコードになっていて、まずはこの辺りを参考にして組み立てていくと良いかも。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2017-02-12 12:19:45
md5:a7a9d31e9bb4ea620796b77463ea3b04
sha1:bfc6b832d92afa5ec3c322cf1305419895ddeb5e
コメント
コメントを投稿するにはログインして下さい。