Java編譯后在Ubuntu上的調試方法
在調試前,需確認Ubuntu系統已安裝JDK并配置好環境變量。通過以下命令安裝OpenJDK(以11為例):
sudo apt update && sudo apt install openjdk-11-jdk
配置環境變量:編輯~/.bashrc文件,添加export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64和export PATH=$PATH:$JAVA_HOME/bin,然后運行source ~/.bashrc使配置生效。驗證安裝:javac -version(應顯示編譯器版本)和java -version(應顯示運行時版本)。
調試需獲取源代碼與行號信息,編譯時必須添加-g參數(生成包含調試信息的.class文件):
javac -g YourClassName.java
若未添加-g,調試工具將無法顯示變量值、斷點位置等關鍵信息。
jdb是JDK自帶的命令行調試工具,適合習慣終端操作的用戶。
jdb YourClassName(YourClassName為包含main方法的類名)。stop at YourClassName:20。run,程序將在斷點處暫停。step:進入當前行調用的方法內部;next:執行當前行,不進入方法內部;cont:繼續執行程序直到下一個斷點或結束。print variableName(如print count)查看變量當前值。where查看方法調用堆棧,定位錯誤發生位置。IntelliJ IDEA、Eclipse等IDE提供直觀的圖形化調試界面,大幅提升效率。
Run→Edit Configurations,點擊+→Application,設置Main class(主類名)和Use classpath of module(模塊)。Variables標簽頁顯示當前變量值;Step Over(F8)、Step Into(F7)、Step Out(Shift+F8)控制執行流程。File→Import→Existing Projects into Workspace導入Java項目。Debug As→Java Application。Step Into、Step Over、Resume等按鈕控制調試流程。若Java程序運行在遠程Ubuntu服務器上,可通過遠程調試連接到本地IDE。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar your-app.jarsuspend=y表示程序啟動后暫停,等待IDE連接;address為監聽端口)。Run→Edit Configurations→+→Remote,設置Port為5005,點擊OK。Run→Debug Configurations→Remote Java Application,設置Host(服務器IP)和Port(5005),點擊Debug。log4j.properties或logback.xml中配置日志級別(如DEBUG),通過日志文件定位問題。jstack生成線程快照,查看線程狀態(如死鎖、阻塞),命令:jstack <pid>(pid為Java進程ID,可通過jps命令獲?。?。