Debian系统下Java错误调试技巧汇总
java -version(查看JRE版本)、javac -version(查看编译器版本)命令确认Java是否安装。若未安装,通过sudo apt update && sudo apt install openjdk-11-jdk(以OpenJDK 11为例)安装。JAVA_HOME指向正确JDK路径(如/usr/lib/jvm/java-11-openjdk-amd64),PATH包含$JAVA_HOME/bin。编辑/etc/environment(全局)或~/.bashrc(用户级)文件,添加对应行后执行source命令使更改生效。sudo update-alternatives --config java切换默认版本;编译/运行时通过-source(如javac -source 1.8)和-target(如javac -target 1.8)选项指定版本,避免UnsupportedClassVersionError。tail -f /var/log/syslog(实时日志)、journalctl -xe(系统服务日志)或dmesg(内核日志)获取错误上下文,定位系统级问题(如权限、服务未启动)。logs/目录下的日志文件(如application.log),关注ERROR或WARN级别日志;若未配置日志,可通过java -Djava.util.logging.config.file=logging.properties启用默认日志。ps aux | grep java列出所有Java进程,检查是否有异常进程(如CPU占用100%或内存泄漏)。top(实时CPU/内存占用)、free -h(内存使用情况)、df -h(磁盘空间)命令,识别资源瓶颈(如内存不足导致的OutOfMemoryError)。jstack <pid>(<pid>为Java进程ID,可通过jps命令获取)生成线程转储,分析死锁(deadlock关键字)、线程阻塞(BLOCKED状态)问题。jmap -heap <pid>查看堆内存使用情况(如老年代占用过高),jmap -dump:format=b,file=heap.hprof <pid>导出堆转储文件,结合MAT(Eclipse Memory Analyzer)工具检测内存泄漏(如未关闭的数据库连接)。strace -p <pid>跟踪Java进程的系统调用,定位文件/网络访问失败(如ENOENT表示文件不存在)或权限问题(如EACCES表示拒绝访问)。-cp(或-classpath)选项指定依赖路径(如java -cp ".:/path/to/library.jar" com.example.Main);使用Maven/Gradle构建项目时,执行mvn clean install(Maven)或gradle build(Gradle)自动下载并管理依赖。sudo apt install安装对应库(如libmysql-connector-java用于MySQL连接)。mvn clean(Maven)或gradle clean(Gradle)清理项目缓存(如target/目录),然后重新构建,解决因临时文件导致的编译错误。jdb(Java Debugger)启动调试会话(如jdb com.example.Main),设置断点(stop at com.example.Main:10)、单步执行(next)、查看变量值(print variableName),适用于简单调试场景。-agentlib:jdwp参数启动Java进程)。