Java在Debian下如何调试
在Debian这类Linux发行版下开发Ja va应用,调试环节是躲不开的必修课。从基础入门到远程调试,再到配合一些辅助工具排查疑难杂症,每一步都有对应的最佳实践。这篇文章就把Debian下调试Ja va程序的常见招式走一遍,挑着用就行。 准备工作:安装JDK 调试Ja va程序的第一步很直接:得先
在Debian这类Linux发行版下开发Ja va应用,调试环节是躲不开的必修课。从基础入门到远程调试,再到配合一些辅助工具排查疑难杂症,每一步都有对应的最佳实践。这篇文章就把Debian下调试Ja va程序的常见招式走一遍,挑着用就行。
准备工作:安装JDK
调试Ja va程序的第一步很直接:得先确认系统里有JDK(Ja va Development Kit)。这东西是编译、运行和调试Ja va程序的工具箱,像ja vac、ja va、jdb这些命令行工具都靠它。推荐装OpenJDK,版本选11或者更高,用包管理器一条命令就搞定:

sudo apt update
sudo apt install openjdk-11-jdk
装完之后验证一下环境:
ja va -version # 查看Ja va运行时版本
ja vac -version # 查看Ja va编译器版本
屏幕上能正常弹出版本号,那就算准备妥当了。
使用命令行工具jdb调试(基础方式)
如果你偏爱终端操作,或者没有条件装图形界面,jdb就是JDK自带的那把瑞士军刀。听起来是纯键盘战士的玩法,但用熟了反而利落。
第一步,编译时记得加上-g选项。少了这个标记,生成的字节码里不包含行号、局部变量这些调试信息,jdb根本找不到断点的位置:
ja vac -g YourClass.ja va
第二步,启动调试会话:
jdb YourClass
第三步,设置断点。用stop命令可以按文件名加行号,也可以按方法名来:
stop at YourClass:10—— 在第10行停住stop in YourClass.methodName—— 进入指定方法时停住
第四步,正式开始调试。输入run启动程序,代码会在断点处暂停。这时候面前就是一个可以自由探索的战场了:
next(或n):逐行执行,不钻进方法体step(或s):执行当前行,且进入方法内部continue(或c):继续跑,直到下一个断点print variableName(或p variableName):查看变量当前值locals:展示当前方法里所有局部变量quit:退出调试会话
使用IDE调试(推荐方式)
对于稍微复杂一点的项目,还是IDE更友好。IntelliJ IDEA或Eclipse这类编辑器提供了图形化的调试界面——点一点、看一看,比命令行直观得多。拿IntelliJ IDEA举个例子:
先导入项目:File -> Open,把Ja va项目拉进来。如果需要调试远端的服务(比如Tomcat、Spring Boot应用),还得加个远程调试配置:
- 点顶部菜单
Run -> Edit Configurations - 点
+号,选Remote JVM Debug - 设置好端口(就像5005,得跟远程程序的调试端口对应上)
- 点击
Apply保存
调试操作本身很简单:在编辑器左侧行号旁边点一下,红色圆点就代表断点已设好。然后点击工具栏的Debug按钮(就是那个绿色小虫子),或用快捷键Shift + F9启动。程序会在断点处暂停,调试窗口会展示当前作用域内的变量、自定义表达式,以及线程的调用堆栈。
常用的调试按钮基本都在工具栏上:
Step Over(F8):不进入方法,自身逐行走Step Into(F7):钻进方法里去Step Out(Shift + F8):跳出当前方法Resume Program(F9):继续跑,直到下一个断点Evaluate Expression(Alt + F8):当场算个表达式,或者改个变量值
远程调试(服务器场景)
有时候Ja va程序是跑在远程的Debian服务器上的,比如Tomcat或Spring Boot应用。这时候就需要借助JDWP(Ja va Debug Wire Protocol)来建立远程调试通道。
第一步,启动远程程序时带上几个JVM参数。以Spring Boot为例,启动命令看起来会是这样:
ja va -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar your-application.jar
拆开看看这几个参数的作用:
transport=dt_socket:走Socket通信server=y:当前程序扮演调试服务器的角色,等待调试器来连suspend=n:程序不等人,直接启动。如果设成y,那就得等调试器连上了才启动address=5005:调试端口,可以自己定,但别忘了一块把服务器防火墙打开
第二步,IDE这边,选择之前配置好的远程调试项,点击Debug按钮。IDE就会连到远程服务器的5005端口。剩下的操作就跟本地调试一模一样了,在你设置的断点处停住、单步、查变量,都没问题。
辅助调试工具
调试这件事不止于打断点和单步执行。日志分析永远是最直接的辅助手段,System.out.println或者Log4j、SLF4J这些日志框架都能润物细无声地帮你理清逻辑。如果遇到性能问题或者死锁、内存泄漏这类深层bug,JDK自带的工具就得请出来了:
jstack # 查看进程的线程堆栈(pid由jps提供)
jmap -dump:format=b,file=heap.hprof # 生成堆转储文件
jhat heap.hprof # 解析堆转储文件,默认7000端口
这些工具很适合用来诊断复杂性能问题,特别是多线程协作不正常或者内存占用居高不下的时候,它们能提供非常核心的线索。
Debian下的Ja va调试场景基本就这些了。命令行适合简单快速的排查,IDE适合做项目级别的精细化调试,远程调试则是面对生产环境必要的一招。选哪种方式,完全取决于你手头的问题有多大、环境有多复杂。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















