コレクション、ストリーム、およびウォッチレンダラのデバッグ


最後の2つのducklingsで、私はブレークポイントに関する広範囲な議論を終えて、私の焦点を時計域に変えました.それには、我々はいくつかの驚くほど、私たちの実行中のアプリケーションに洞察力を構築できるように知られているツールがあります.何かが正しく動作する場合、一目でわかることができることは多くのアプリケーションにとって重要です.
これはコレクションや配列に非常に重要です.我々は、コレクション内の要素の数千または数百万を持つことができます.デバッグは、いくつかの基本的なツールなしで非常に困難です.



シイアルモグ
デバッグエージェント

🦆 Duckling 8 :要素のデバッグコレクション💪時計のコレクション&配列をフィルタリングできますか?ちょうど“良いもの”を参照してください!Intellijに組み込まれたストリームデバッガを使用しましたか?それは驚くべきです、そして、人々はそれについて知りません..
午後13時07分- 2022年3月28日



シイアルモグ
デバッグエージェント

🦆 Duckling第9:どのように、あなたは直接腕時計域で必要とするものを正確に示しますか?どのように、あなたはあなたのパフォーマンスを窒息させないことを確認しますか?スプリングブートJPAのユーザー.チェックアウト.
午後14時58分

コレクション、配列、ストリーム


コレクションのデバッグ(リスト、マップなど)と配列が痛いです.結果を掘り下げたり、条件付きのブレークポイントをループに配置する必要があります.それはすべて痛い.より良い解決策があります.

フィルタリングコレクション


話をしたdifferent type of filters 週間前に、2つを混同しないでください.フィルタの種類がたくさんあります.ここでは、コレクションと配列に適用されます.
これは、デフォルトで実際にはマイナーな機能です.しかし、ほとんどの開発者もそれに気付かない.オブジェクトの配列を展開すると、IDEがnull値を隠していることがわかりました.これはデフォルトでは、あなた自身を追加することができますフィルタです.

我々は、時計の配列またはコレクションを選択し、それを右クリックして起動することができます.次に、“フィルタ”オプションをクリックします.

次に、“this”が現在の要素を表す場所を入力できます.Enterキーを押すと、フィルタが適用され、該当する要素だけが表示されます.この場合、メソッド呼び出しとその結果をフィルタの一部として使用します.

ここではフィルタが動作します.我々はそれの隣に“クリア”ボタンを押してクリアすることができます.我々はそれをあまりにもクリックしてそれを編集することができます.

ストリームデバッガ


私は頻繁にJavaの8ストリームAPIを使用している間、私はまだほとんどの場合ループのための古いを好む.この理由はデバッグです.ループは本質的にデバッグに容易です.それは我々がストリームをデバッグすることができないことを意味しません、しかし、それはしばしばより挑戦的で、より多くのWigglingを必要とします.
Jetbrainsは問題を理解して、最初にプラグインとして流れデバッガを導入して、現在、IDEでビルトインツールとして入りました.現在のブレークポイントがストリーム上で停止したときに、ボタンをクリックしてストリームデバッガを起動できます.

このボタンを押すと、ストリームデバッガが起動されます.それは、ビデオを見て、おそらくそれをよりよく説明する1つのツールです、しかし、私は試みます...

このツールは、ステージとしてすべてのストリーム機能を表します.あなたは、次の段階で彼らのカウンターパートに1つのステージマップの要素を見ることができる段階の間を行ったり来たりすることができます.たとえば、マップ操作は、要素の型を新しい型に変換できます.したがって、マッピングの前の要素とポストマッピングインスタンスの矢印が表示されます.
すべての要素が「生きている」ことに注意してください、そして、あなたは腕時計の通常の点検でありえるように、すべてを検査することができます.

レンダラ


我々は通常、あまりにも多くの考えを与えることなく時計エリア内の要素を見てください.それは「オブジェクト」またはデータです.
しかし、我々が見るものはレンダラがデータを解釈する方法です.Javaでのレンダラの既定の動作はtoString() メソッド.それで、これをカスタマイズする間、良いレンダラが成し遂げることができる多くが、あります.
実際には、来週のアヒルは、この主題にさらに深く掘ります.

ミュートレンダラデバッグをスピードアップする


あなたは、反応しないデバッグを憎みませんか?
ステップを押すと何かを永遠に待つだけで非常にイライラされます.
デバッガが遅くなる理由がたくさんあります.それらのいくつかは、我々がデバッグしているアプリケーションに関連していますが、それらのかなりの数は私たちがオン/オフの機能に関連しています.レンダラはこのカテゴリーに入る.彼らは多くの時計の要素を持っているとき、またはそれらをレンダリングするためのプロセスが遅い場合は非常に高価なことができます.

幸いにもJetbrainsは簡単な回避策を提供します.ウォッチエリアを右クリックしてこれを有効にできます.

レンダラをミュートすると、短い形式のレンダリングとして表示されます.ちょうどオブジェクトIDボタンの横にある.このエントリをクリックすると自動的にレンダリングを実行します.この場合、レンダリングはtoString() ここで示した方法.

クリックすると、レンダラで正しい値を見ることができ、この値に対してのみ結果を検査できます.他の値は、まだ「レンダリングされない」かもしれません.

レンダラのカスタマイズ

toString() 多くのことに最適ですが、オブジェクトについて知りたいことを表すことはできません.特にサードパーティのオブジェクトは、我々は制御できませんtoString() パフォーマンスが問題の場合の実装.toString() オブジェクトを生産中にログオンするときに使用するので、効率的でなければなりません.我々はデータを負担することはできません.

メニュー項目は、レンダラカスタマイズメニューを起動します.これは、デフォルトのレンダラの多くの微妙な機能を制御できるかなり強力な機能です.

このダイアログで多くのオプションがあります.このダイアログでは、ウォッチポイントの要素をカスタマイズできます.私の好きなオプションの一つは整数のための16進値を表示するものです.
ここでは、上記のフィルタセクションで議論した配列とコレクションのオプションで隠すNULL要素をチェックします.また、制限することができますtoString() 特定のオブジェクトへの振舞い.

型レンダラ


簡単な場合はtoString() 本当によく動作します.しかし、レンダリングロジックに影響を与える能力が大きな違いを生む複雑な場合があります.ポイント、スプリングブーツJPAリポジトリ.これらは、基礎となるデータベースをCRUD操作の集合として抽象化するインターフェースです.詳細toString ()メソッドは高価です.これはSQLクエリをトリガすることができます.
しかし、デバッグするとき、これはかなり価値があるかもしれません.

まず、レンダラの正しい型を選択する必要があります.適切なオブジェクトを選択するには、基本型を使用できます.この場合、JpaRepositoryは基本インターフェイスです.式を使用します.
"JPA Repository with " + count() + " elements"
我々は効果的にcount() レンダリングされるオブジェクトのメソッド.これはおそらく、基になるデータベースへのSQL呼び出しをもたらすでしょうが、それは通常のデバッグ中に十分にパフォーマンスがあるかもしれません.
レンダリングがミュートレンダリングされたレンダラと同様に動作するように、「オンデマンド」フラグをチェックすることができます.
拡張をサポートする要素については、追加の式を使用してデータの完全なセットを取得できます.こちらではfindAll() IntelliJが拡張時に表示される要素を一覧表示するには.私も使用count() > 0 リストが拡張可能であることを示す.
ご覧のように、トップリポジトリはJPAリポジトリです.一番上のリポジトリは一目でわかりやすく、即座にデータベース内のすべての要素を検査することができます.それは非常に強力です!
閉じるこの動画はお気に入りから削除されています.私はそこで時間がなくなった.来週のビデオは、それと追加の興味深いレンダラ機能をカバーします.

概要


時計の右側の情報を示すことは重要です.我々は何が起こっているの感覚を得ることができます!
デバッグは愚かなことで失敗することができます.
  • あまりに多くの情報
  • わずかな情報
  • 我々が見つける深い階層を通して掘る必要がある情報
  • 私たちは上記の技術でこれらのことを解決することができます.あなたのウォッチセクションを順番に得るならば、あなたのデバッグセッションははるかに流暢になります.
    次の分割払いで、あなたのチーム全体のデバッグセッションをより流暢にする方法を教えます.