JavaRush /Java Blog /Random-JA /IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング
Viacheslav
レベル 3

IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング

Random-JA グループに公開済み
コードを書くだけで戦いは半分終わります。正しく動作させるにはまだ作業が必要です。IDE とデバッグ ツールは、これに非常に役立ちます。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 1
IntelliJ IDEA を例として使用して、実行時にコードに何が起こるかを調べる方法を理解することを提案します。デバッグは幅広いトピックであるため、このレビューではダイバーのような深いダイビングは提供しません。でもシュノーケリングは絶対にしたいです)

導入

コードの作成にはデバッグも含まれます。また、タスクにコード サポートが含まれている場合は、さらに多くのデバッグが必要になります。さらに、デバッグの助けを借りて、他の人のコードのジャングルに浸るのと同じくらい深く、使用されているライブラリとフレームワークの動作を調べることができます。ダイビングには次のものが必要です。 まず、ダウンロードしたアーカイブをクイック スタート ソース コードとともに解凍します。IntelliJ Ideaを起動し、「既存のソースから新しいプロジェクト」を作成します。hibernate4サブディレクトリ内のpom.xmlファイルを選択します。インポート時に「Maven プロジェクトを自動的にインポートする」を指定し、その他の設定は変更せずにプロジェクトの作成を完了します。プロジェクトのインポート中に、ダウンロードした WildFly アプリケーション サーバーをディレクトリに解凍します。ファイルbin\standalone.bat(*nix システムの場合はstandalone.sh) を使用してサーバーを起動します。 (!) --debug パラメータを指定して開始することが重要です 。サーバーが起動するのを待ちます。彼らは私たちにそれが始まったことと時間を示す手紙をくれます。次のようになります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 2
次に、選択したプロジェクトをサーバー上で実行する必要があります。このプロセスは、プロジェクト自体にある小さなドキュメントで説明されています。 \hibernate4\README.adoc このドキュメントに示されているように、hibernate4 ディレクトリでコマンドを実行する必要があります。mvn clean package wildfly:deploy ビルドが正常に完了したというメッセージを待っています。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 3
この後、サーバー ログで、新しいプロジェクトがどのように「デプロイ」されたかを確認できます。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 4
その後、ページに移動すると、「会員登録http://localhost:8080/wildfly-hibernate4」フォームのあるページが表示されます。これで実験の準備が完了し、開始できます)) わかりやすくするためにたくさんの写真を用意しますので、準備をしてください)

リモートデバッグ

したがって、IDE がアプリケーション サーバー上のコードの実行を制御できるように、デバッグ モードを構成する必要があります。IntelliJ Idea には、無料 (コミュニティ) と有料 (アルティメット) の 2 つのバージョンがあります。後者はEAPの形で正式に試すことができます。Ultimate バージョンでは、すべてがシンプルです。アプリケーション サーバーはデバッグ モードで IDE から直接起動できます。ただし、コミュニティ バージョンでは、いくつかのことを手動で行う必要があります。したがって、より複雑なケースを考えてみましょう。コミュニティ版での設定です。コミュニティ バージョンにはいくつかの制限があります。特に、そこからアプリケーション サーバーを実行することはできません。ただし、必要なアプリケーションを備えた実行中のサーバーが別の場所にある場合は、リモート デバッグ (リモート デバッグ) をセットアップできます。ここからのセットアップの説明を使用しましょう: IntelliJ Idea コミュニティ エディションのリモート デバッグ Wildfly (ポート 8787 のリモート実行構成のセットアップ)。構成後、新しい構成をデバッグ モードで起動します。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 5
すべてが正常であれば、これに関するメッセージが以下に表示されます。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 6

デバッグプロセス

レコードを保存してデバッグしてみましょう。そのためには、まず探索する場所を決める必要があります。ウィンドウから判断すると、「登録」ボタンが必要です。コードから見つけてみましょう。したがって、要素が必要です。その要素には「Register」というテキストが含まれている必要があります。あるいは、彼女には何か関係があるはずだ。クリックしCtrl+Shift+Fて「引用符で登録」を探します。1 つは、index.xhtml にあることがわかります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 7
Enter を押して、見つかったソースに移動します。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 8
登録時にmemberController.registerが呼び出されていることがわかりますが 、これは何らかの Java クラスであると思われます。クリックしCtrl+Nて次のものを検索します。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 9
確かにそういう授業はありますね。それでは始めてみましょう。どうやら、 register メソッドがあるはずです。クリック Ctrl+F12して登録方法を探します
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 10
確かに、私たちはそれを見つけました。どうやら、ここ、memberRegistration.registerで登録が行われるようです。Ctrl キーを押しながらメソッドをクリックして「フォールスルー」します。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 11
次に、「ブレークポイント」またはブレークポイントを設定しましょう。これは、コードの実行をどこで一時停止するかを示すマーカーです。この瞬間、私たちはたくさんの興味深いことを学ぶ機会を持つでしょう。これを配置するには、行番号の右側の場所をクリックする必要があります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 12
http://localhost:8080/wildfly-hibernate4 ページでフィールドに入力し、「登録」ボタンをクリックします。パネル上のアイデア アイコンが点滅します。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 13
「アイデア」に移動すると、デバッグ パネルに興味深い情報がたくさんあることがわかります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 14
ここで、オブジェクトのフィールドの値を確認できます。たとえば、登録メンバーの構成は次のとおりです。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 15
素晴らしい。他に何ができるでしょうか?コンテキスト メニューを開いて、そこで [式の評価] を選択します (または、[実行] -> [式の評価] メニューを通じて)。さらに良いのは、デバッガのコントロール パネルで次のことを行うことです。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 16
これはブレークポイントでの非常に優れた機能であり、そのコード ポイントがアクセスできるすべてのものにアクセスして、その時点で実行できるコードを実行できます。例えば:
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 17
デバッガーのコントロール パネルには、プログラム フロー コントロールを移動する場所を制御するコントロール ボタンもあります。魔法ではないでしょうか?) F8 (ステップアウト) ボタンを押すと、メソッドを入力せずにコードを実行します。F9 キーを押すと、デバッガーによるコード行の実行が停止され、プログラムの実行制御がデバッガーに与えられます。F7 (ステップイン) を押すと、コードを実行し、途中で見つかった各メソッドを入力します。ちなみに、この情報ブロックには特に注意してください。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 18
これは、現在いるスレッドと、現在のスレッドのスタック上のメソッドを示しています。しかし、それだけではありません。便宜上、「フレーム」タブを開くことができます。これを行うには、有効にする必要があります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 19
[フレーム] タブには、メソッドからメソッドへの移行に関する情報が表示されます。Step Into を使用してコードの実行を開始しました。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 20
ご覧のとおり、プログラムが現在実行されている場所に常に転送されるわけではありません。現在、「getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)」にいます。しかし実際には、私たちは実行に移しています。これは、次のように指定されたクラスによって証明されます。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 21
これを見てみましょう。ご存知のとおり、これは現在のオブジェクトを指します。私たちはTransactionScopedEntityManagerにいます。Idea はなぜコードを見せてくれないのでしょうか? 実際のところ、IntelliJ Idea は現時点では TransactionScopedEntityManager について認識していません。これはプロジェクトに接続されていません (プロジェクトの依存関係にありません)。アプリケーション サーバーが実行されているとき、その内部では非常に多くの異なるライブラリが実行されます。しかし、私たちは彼らについてほとんど知りません。一般に、内部を詳しく調べる必要はありません。機能するだけで十分です。しかし、仕事やスポーツの関係でそれが必要になる場合もあります。次に、このライブラリについて Idea に通知し、クラス コードをどこで取得できるかを Idea に知らせる必要があります。

デバッグ用のサードパーティ ライブラリの接続

まず、接続する必要があるライブラリがどのようなものであるかを私たち自身が理解する必要があります。 最初の方法は最も困難です - インターネットで検索します。結果を見つけるまでのスピードと結果は、プロジェクトがどれだけうまく管理されたかによって大きく左右されます。たとえば、WildFly にはオープン リポジトリがあります。したがって、Google で「TransactionScopedEntityManager」を検索すると、https://github.com/wildfly/wildfly/tree/master/jpa/subsystemにアクセスし、wildfly-jpa が必要であることがわかります。 2 番目の方法が正しいです。サーバーがどこにあるのか、そこを見てください。これにはさまざまな手段が役立ちます。たとえば、Windows ではFar Managerになります。以下は検索アルゴリズムの例です。インストールして起動したら、Tab をAlt+F1使用して左側のタブまたはAlt+F2右側のタブを使用していずれかのタブに切り替え、ハードドライブ上で必要なパーティションを選択します。インストール後に Far Manager ディレクトリ自体が Far Manager で開かれる可能性は十分にあります。ディスクのルートに移動するには、 を押しますCtrl + \。を使用して、Alt+F検索ウィンドウを開き、ディレクトリの名前の入力を開始し、ディレクトリが見つかったら Enter キーを押します。この検索は賢く、検索テキストに一致するディレクトリを強調表示します。フォルダが存在しない文字を入力した場合、その文字は入力できません。このようにして、アプリケーション サーバー ディレクトリに移動します。モジュールがサーバー上のどこにあるかわからないとします。おそらく、ある種の WildFly について聞くのは人生で初めてかもしれません。したがって、ここをクリックしてすぐにAlt+F7ファイルを検索してください。したがって、論理的には、ライブラリを含むファイルが必要であると判断されます。つまり、瓶が必要です。内部には TransactionScopedEntityManager クラスがあるはずです。なぜなら class = file の場合は、「contains」を探します。つまり、次のようなものです。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 22
さて、結果を待ちましょう。彼はあなたを待たせません)
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 23
次に、そのソースコードをどこかで見つける必要があります。そして、オプションは 2 つあります。 おそらく 2 番目のものを使用しましょう。そこで見つけてみましょう:
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 24
次に、依存関係の説明に進みます。このページではソースコードをダウンロードできます。無事、コードがダウンロードされました。あとはライブラリを接続するだけです。非常にシンプルに接続できます。プロジェクト設定を開く必要があります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 25
そこで「ライブラリ」を選択し、受け取ったソースコードを「ソース」セクションに追加します。「クラス」セクションでは、Far Manager を使用して見つけた WildFly ディレクトリからのライブラリ jar ファイル自体を指定します。この後、F7 キーを押して移動すると、AbstractEntityManager クラスと TransactionScopedEntityManager クラスの内容が表示され、Ctrl+N を使用したクラスによる検索でも使用できるようになります。

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

ブレークポイントに戻りましょう。常に停止したいわけではなく、何らかの条件下でのみ停止したい場合があります。何をするか?ここでも IDE が役に立ちます。ブレークポイントを配置することで、条件を割り当てることができます。たとえば、点を配置して右クリックします。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 26
これで、ブレークポイントは名前が Maximilian の場合にのみ起動されます。[詳細] ボタンをクリックすると、ブレーク ポイントの拡張された設定セットが利用できるようになります。

例外時のブレークポイント

場合によっては、エラーが発生し、その原因を追跡したい場合があります。次に、コードの特定の行ではなく、例外がスローされる場所にブレークポイントを追加できます。これを行うには、すべてのブレークポイントのリストを展開する必要があります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 27
そして、選択した例外タイプに新しいルールを作成します。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 28
たとえば、NPE の場合は次のようになります。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 29

ホットスワップクラス

デバッガってすごいですね。デバッグに加えて、クラスを変更することもできます。はい、リソース (xhtml ページなど) はそう簡単に変更できません。ただし、Java クラスのコードはオンザフライで置き換えることができます (これはホットスワップと呼ばれます)。これを行うには、デバッガーが接続されているクラスを変更し、「実行」→「変更されたクラスの再ロード」を実行するだけです。このトピックに関する役立つレビュー: JVM でコードをホットスワップする 4 つの無料の方法

結論

デバッガは、開発者が実行コードの奥深くまで侵入し、コードを細部まで調査できる強力なツールです。これにより、最も紛らわしいエラーを修正できます。また、特定のライブラリがどのように機能するかをより深く理解できるようになります。このような短いレビューでも非常に印象的なものになりましたが、有益で興味深いものになることを願っています。この資料に興味がある人は、次のリンクを使用してダイビングを続けることができます。
IntelliJ IDEA とデバッグ: ダイビングではなくシュノーケリング - 30
#ヴィアチェスラフ
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION