Like Share Discussion Bookmark Smile

J.J. Huang   2021-09-12   天堂私服   瀏覽次數:

天堂私服 | IntelliJ IDEA 遠端除錯(Remote Debug)Jar包

思路

網路上充斥著各式各樣的模擬器版本,最常見的屬沒有原始碼的版本,或是提供了反編譯後的原始碼。
這種原始碼會因為反編譯程式,或模擬器本身有混淆過,造成原始碼閱讀困難,甚至在使用IDE開啟原始碼後一堆的錯誤..等等狀況。
這樣的原始碼並不能在IDE內正常啟動除錯模式,做除錯(Debug)。

註:加殼的這邊不考慮,脫殼又是一門技術。

而這邊使用一個遠端除錯Remote Debug的思路,來針對我們啟動的Jar檔做Debug


簡單說明:

  • Jar設定成可遠端除錯並啟動。
  • IDE開啟並匯入原始碼。
  • 新增Remote JVM Debug,並啟動,開始除錯(Debug)。

而使用這種除錯模式有幾種特性。

  • 所運行的程式碼邏輯都依照Jar為主。
  • 原始碼不需要可以正常啟動也可除錯。

    註:這兩種特性後面會有驗證示範說明。

遠端除錯模式

  • 進入L1J-3.80c目錄資料夾。
  • 複製一個ServerStart.bat,並修改檔案名稱為ServerStart_Debug.bat

  • 編輯ServerStart_Debug.bat檔,修改如下。
  • 修改前:
    1
    2
    3
    4
    @ECHO OFF
    java -Xmx512m -Xincgc -jar l1jserver.jar

    PAUSE
  • 修改後:
    1
    2
    3
    4
    @ECHO OFF
    java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -Xmx512m -Xincgc -jar l1jserver.jar

    PAUSE
  • 參數說明
    • Xdebug:JVMDebug模式下工作。
    • Xrunjdwp:JVM使用(java debug wire protocol)來運行除錯環境。
    • transport:監聽Socket端口連接方式,常用的dt_socket表示使用Socket連接。
    • address:表示本地監聽的地址和端口。
    • server:y = 表示當前是除錯服務端,n = 表示當前是除錯客戶端。
    • suspend:是否在調試客戶端建立連接之後啟動。

  • 執行ServerStart_Debug.bat檔。
  • 彈出黑盒子顯示內容為Listening for transport dt_socket at address: 5005
  • 此時模擬器是尚未啟動的,他在等待除錯的客戶端建立完連接才會啟動。(黑盒子請不要關閉)

    註:這是因為suspend = y,如果要他依舊可以值耶啟動,可設定為 suspend = n。

  • 開啟IntelliJ IDEA,並選擇L1J-3.80c專案進入。
  • 點擊RunEdit Configurations...
  • 開啟Run/Debug Configurations視窗。
  • 點擊左上角的+,點擊Remote JVM Debug
  • 右邊視窗設定Name
  • 選擇Use module classpath。(對應的原始碼專案)
  • 最後點擊ApplyOK
  • 此時可見上方已經選擇剛剛設定好的Remote JVM Debug的設定L1J-380C-RJD
  • 點擊Debug按鈕。
  • 此時再回到剛剛啟動的黑盒子,會發現模擬器正常啟動完畢。
  • 這時候除錯模式已經準備完畢了。

  • 我們驗證一下是否有效果。
  • 我們嘗試在Beginner程式內的,第54設定斷點。
    1
    src.l1j.server.server.model.Beginner
  • 使用登入器嘗試登入看是否可以正常連線進入。
  • 天堂建立新人物。
  • 會跳回Intellia IDEA視窗,且斷點在剛剛設定的位置。
  • 且天堂視窗會卡在人物建立的畫面並不會到人物選擇畫面。
  • 假設都沒問題後,可以按下Resume Program恢復程式,讓程式正常執行完畢。
  • 回到天堂視窗可見已經建立好人物,且回到人物選擇視窗。

驗證特性

在這之前請先將正在運行的除錯模式都停止。

  1. 驗證「運行的程式碼邏輯都依照Jar為主」

針對啟動模擬器後,會在黑盒子輸出的初始化完畢的字,在IDE做修改成遠端除錯模式測試,並重新包過Jar檔;包完後將剛剛修改的字做環原初始化完畢
再使用「遠端除錯模式」看看黑盒子輸出的內容會是初始化完畢還是遠端除錯模式測試
這樣就可以知道到底是不是依照Jar為主還是依照IDE的程式碼為主。

最後可以確認這樣的除錯是依照Jar為主唷。

註:修改程式碼的過程,不要忘記要儲存唷。


  1. 驗證「原始碼不需要可以正常啟動也可除錯」
    故意修改程式讓其出錯,然後啟動遠端除錯模式,看是否可以正常除錯。

    最後確認這樣的除錯依舊可行唷。

結語

這邊的一些思路和使用的方法已經全部教學完畢,希望夠多的新手可以更快進入狀況,可以有更多的想法。請多多支持原創文章。謝謝。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章結目錄,此處會不定時更新。

免責聲明

  • 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
  • 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有
  • 本部落格文章為研究SQL資料庫與修改JAVA語法使用,非商業用途,亦無做營運事實等任何一切商業行為
  • 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容

註:以上參考了
Intellij IDEA Tutorial: Remote debug