19
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Chrome DevTools の便利な機能を何もわかっていなかった(Debugger編)

Posted at

はじめに

以前の記事でDevToolsのドキュメントを読んで学びがあったため続編。
日々フロントエンドで戦っているエンジニアには当然の知識かもしれませんが
バックエンドからたまに出てくるくらいの方には発見があるかもしれません。

「Javascript」の項目あたりからいくつかピックアップします。
https://developers.google.com/web/tools/chrome-devtools/javascript/

※上記リファレンスのデモページが使いやすいためサンプルとして利用します

活用できていなかった機能

ブレークポイントの使い分け

DevtoolsのSourcesタブ上にソースを表示して
該当行をクリックしてやると青色の矢印が表示され、ブレークポイントを置けます。
実行時にはここで処理が一時停止し、関連する変数や処理の確認ができます。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
debuggerステートメントをソースに書いたときにも同じ動作になります。
この状態からステップ実行してデバッグができます。

ここまでは流石に知っていましたが、画面の右下を見るとさらにメニューがあります。
例えば今回のデモにはボタンのクリックイベントによって発火する処理があるため
ここをデバッグするためにはイベントリスナー用のブレークポイントを設定します。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png

この状態でデモ上のボタンをクリックすると、ソースの15行目で処理が一時停止しました。
他にもDOMの変更やXHRの内容に応じて動作するブレークポイントなどがあるようです。

条件付きブレークポイント

ブレークポイントを置きたい行をクリックではなく右クリックすると
「条件付きブレークポイント(Conditional breakpoint)」を選択できます。
ここでは addend1 の値が1を超える場合のみ一時停止させる設定をしています。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
設定が完了すると該当行に黄色の矢印が表示されます。
同じ処理が何度も呼ばれるが特定の条件下でのみ確認したい というときに使えそうです。
(粘り強くステップ実行で進めても良いですが、非常に手間…。

ソースのブラックボックス化

ブレークポイントからステップインなどで細かく処理を進めていると
サードパーティのライブラリのようなデバッグの必要のないコードに入り込むときがあります。
ソースコード上で右クリックするとメニュー上でブラックボックス化が可能です。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
これによって、デバッガがこのスクリプトを無視するようになります。
ブラックボックス化されたスクリプトは↓このように設定されていきます。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png

ログの出力

条件付きブレークポイントと同様に行を右クリックするとログポイントの設定メニューがあります。
試しに3つの変数を記載して確定すると、この行にも黄色い矢印が設定されます。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
該当行が実行されるときにはconsoleタブに変数の中身が出力されています。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png

変数の監視

ログポイントでは該当行実行時の変数の中身を表示することができましたが
特定の変数をしばらく追い続けたい状況もあると思います。
Sourcesタブにある「Watch」には監視したい変数を設定します。

変数名を設定しておくと、処理が一時停止されるたびに内容が更新されます。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
「Scope」にも同様の表示がありますが、実行箇所ごとに表示が大きく変化するため
継続的に変化を追うためには「Watch」で監視をした方が良いと思います。

もっと頻繁に変化する値をデバッグしたい場合は
Consoleタブにある目玉ボタン(Live Expression)を利用します。
静止画なのでわかりませんが、記載した処理が250msごとに実行され表示されます。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
ロジックを左右するローカル変数の変化などの監視はできませんが
タイマー処理や座標の調整などのデバッグに活用できそうです。

ブラウザ上でのコード編集

ブレークポイントで一時停止している状態においては
consoleタブ上で実行時のローカル変数にも触れることができます。
例として、32行目でコードを一時停止しておきます。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
この状態でconsoleタブに移動すると、ローカル変数の内部を表示できました。
直後に「こう変えたら正しい挙動になるのでは…?」という検証もできます。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png

ちなみにSourcesタブ上で直接ソースを書き換えてしまうことも可能です。
Demo__Get_Started_Debugging_JavaScript_with_Chrome_DevTools.png
大元のソースとブラウザを何度も行き来する必要がなくなりました。

まとめ

console.log()alert()を埋めていた日々は何だったんでしょう。
まだまだ効率の良い開発を追求できそうです。

19
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?