デバックとは
- できるかできないかで、開発速度が代わってくる。
- システムの見えない(表面化しない)エラーを見つけ出す行為自体を「デバック」という。
- プログラムが動いている最中に、そのプログラムを途中で止めて、いま値がどうなっているかを調べる方法がある。
IDEが提供しているものがある。
実装(リモートデバッグ)
まず、Minecraftファイルの中にある「server_start.sh」を開き「Subline Text」で開き、
「-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005」を挿入する
すると
#!/bin/sh
cd "$(dirname "$0")"
java -Xms4G -Xmx4G -XX:+UseG1GC -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 spigot_server.jar nogui
となる。
そこでサーバーを立ち上げる
そして、IntelliJ IDEAの上のメニューバーの実行→デバック→実行構成の編集へ進む
そして出てきた画面の左上のプラスをクリックし、新規構成の追加から「リモートJVMデバック」を選択
出てきた画面の上に「名称未設定」とでるので、任意の名前をつける。
そして、下の方にある「適用」をクリックし左の「閉じる」をクリック。
そして、再度上の実行→デバックへ進むと、今作った名前の「デバック」が表示されるので、そこをクリック
しかし!!
ここでエラー「localhost:5555」ポートを開けませんとでた。
問題解決
恥ずかしながら、今までサーバーを立ち上げるにMinecraftファイル内の「spigot-1.21.3.jar(今は変更してspigot_server.jar)」アイコンをダブルクリックしていた。
しかし、ここで動画のようにターミナルを立ち上げ「cd Minecraft」と打ち込み「Minecraftファイル」に移動したあと「./server_start.sh」を打ち込み、サーバーを立ち上げたら、動画にあるような結果となった。
ターゲット VM に接続しました。・・・・・・・・・
なかなかもって挫けそうで、Minecraftファイルを作るところの最初からやり直そうとも思ったが、今できることをやってみてからと思い、様々試してみることにした。
しかし、どれもこれもうまくいかなかったが、
なぜ、気づいたかというと、動画の中のターミナルに「5005」という数字が見えて、それが私のserverには表示されていないことに気づいたので、もしやと思いターミナルから指示しなければいけないのではないかと思い実行したら成功できた。
ちなみに、この状態でマインクラフトにアクセスできることも確認した。
次に進む
Mainファイルに戻り
Bukkit.getPluginManager().registerEvents(this, this);
の横の空間をクリックすると赤丸にチェックが入ったものが現れる。
これをブレイクポイントと呼ぶ。
(ここまで来たら実行される処理をストップするという意味)
複数止めることもできる。
ここでターミナルに戻り「reload」を入力する。
すると途中で止まるが、これは、これまでの工程によりIntelliJ IDEAとspigot_serverがつながったことにより、IntelliJ IDEAからspigot_serverを制御できる状態となった事によるもの。
とまるとどうなるかというと、止まっている状態の値がどうなっているかが見えるようになる。
(IntelliJ IDEAに出力されたものの左のや印をクリックすると出てくる)
再度動かすには、下に表示されているデバッグのメニューバーのようなところにある再生ボタンマーク(カーソルをあてると「再開」とでる」をクリックする。
ここで再開するとサーバーが止まってしまう。
強引に接続させて止めたり動かしたりしているので、サーバーがエラーが起きていると思い止めてしまう。
動いているかどうか怪しいとことにブレイクポイントを設定して動かしてみると、そこが動いていないならそこでは、止まらないという状態となる。(間違っていないか確認できる)
そこで、その部分が動いていないのはなぜかを確認するため、その手前で止めたりして確認していく作業ができるのでエラーの原因がピンポイントで分かるようになる。
これは、他のWebアプリケーションでもできる。
(spigot_serverだけのものではない)
他のものでは、もっとやりやすい場合もある。
問題が解決しないときは、「デバッグ」を思い出すようにする。
コメント