Ubuntu系统下Java程序调试方法与步骤详解
Ubuntu 上 Ja va 调试实操指南
搞定Ja va调试,环境是第一步。下面这份快速自检清单,能帮你把基础打牢。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
一 环境准备与快速自检
- 安装 JDK:目前主流选择是 OpenJDK 11、17 或 21。打开终端,一行命令搞定:
sudo apt update && sudo apt install default-jdk。 - 版本校验:装完后别急着走,敲入
ja va -version和ja vac -version看看,确保两者都返回有效的版本号。 - 环境变量(可选):如果你需要管理多个Ja va版本,配置环境变量会方便很多。可以编辑
~/.bashrc或/etc/environment文件,加入:export JA VA_HOME=/usr/lib/jvm/ja va-11-openjdk-amd64export PATH=$JA VA_HOME/bin:$PATH
- 最后,执行
source ~/.bashrc让配置立刻生效。走完这几步,编译和调试所需的工具链和路径就都准备好了。
二 本地命令行调试 JDB
想深入理解调试过程?命令行工具JDB是个绝佳的起点。虽然不如图形界面直观,但胜在轻量、直接。
- 编译是关键:首先,编译Ja va文件时必须加上
-g参数来保留调试信息:ja vac -g HelloWorld.ja va。 - 启动调试器:然后就可以用
jdb HelloWorld命令进入调试会话了。 - 常用命令一览:
- 设断点:
stop in HelloWorld.main(在方法入口处中断)或stop at HelloWorld.ja va:10(在指定行中断)。 - 运行与继续:
run开始执行,cont从断点处继续。 - 单步执行:
step会“步入”方法内部,next则“步过”当前行。 - 查看状态:
print var打印变量,locals查看局部变量,stack查看调用栈。
- 设断点:
- 一个小练习:为了熟悉断点和栈查看,可以故意写一段会触发异常的代码来练习。
- 代码示例:在
main方法中加入int x = 10/0;。 - 调试过程:在jdb中设置断点后
run,程序会在异常处停住。这时使用stack和print命令,就能清晰地定位问题根源。
- 代码示例:在
以上流程,基本覆盖了命令行环境下设置断点、单步跟踪、查看变量和调用栈这些核心调试能力。
三 IDE 图形化调试
处理复杂的业务逻辑时,图形化调试工具的效率优势就非常明显了。IntelliJ IDEA、Eclipse 或者安装了Ja va扩展的 VS Code 都是不错的选择。
- 基本步骤:
- 在代码行号的左侧单击,轻松设置或取消断点。
- 点击IDE工具栏的“Debug”按钮(或使用快捷键)以调试模式启动程序。
- 利用“变量/表达式观察”窗口和“调用栈”视图,进行单步、步入、步过等操作,所有状态一目了然。
当需要可视化地观察对象内部状态、理清复杂的调用路径时,图形化调试无疑更加高效。
四 远程调试与线上问题定位
有些bug在本地难以复现,或者需要直接诊断测试/生产环境的问题,这时远程调试就派上用场了。
- 开启调试端口:在启动服务时,添加JVM参数以开启调试监听。
- 推荐方式:
ja va -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar app.jar - 旧版参数(不推荐,但可能遇到):
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
- 推荐方式:
- 本地连接:在本地IDE(如IDEA)中新建一个“Remote JVM Debug”配置,填写服务器的IP地址和指定的端口(例如5005)。连接附加成功后,就可以像调试本地代码一样设置断点进行调试了。
这招是定位生产环境疑难杂症、无法本地复现缺陷的利器。
五 运行期诊断与常见问题排查
程序已经跑起来了,但行为异常?下面这些运行时诊断工具能帮你快速定位问题。
- 进程与线程:
- 查看Ja va进程:
jps -l - 抓取线程栈:
jstack,用于分析死锁、线程阻塞或异常线程状态。
- 查看Ja va进程:
- GC 与内存:
- 查看GC概况:
jstat -gcutil(每秒采样一次,重点关注Full GC的次数和耗时)。1000 - 生成堆转储:
jmap -dump:format=b,file=heap.hprof,然后可以用MAT或VisualVM等工具加载分析内存泄漏。
- 查看GC概况:
- 系统层面:
- 资源监控:
top -p $(pgrep -f app.jar)或使用htop实时观察CPU、内存占用。 - 系统调用追踪:
strace -f -o trace.log ja va -jar app.jar,当怀疑是文件、网络、权限等系统层问题时,这个命令能提供底层线索。
- 资源监控:
- 常见问题速查:
- 版本/类路径问题:再次确认
ja va -version和ja vac -version;确保运行时的classpath包含了所有依赖的JAR包。 - 日志与输出:仔细检查应用自身日志以及容器(如Tomcat)日志,必要时适当提升日志级别以获取更详细的信息。
- 版本/类路径问题:再次确认
从线程、内存、GC到系统调用和依赖管理,这套组合拳基本覆盖了线上Ja va应用最常见的问题定位路径。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Ubuntu系统下Golang程序打包成功但运行失败的解决方法
在Ubuntu上使用Golang进行开发:编译成功但运行出错的排查指南 在Ubuntu环境下用Go语言搞开发,有时候会遇到一个挺让人挠头的情况:代码明明编译通过了,可一运行就报错。这种“编译一时爽,运行火葬场”的体验,确实影响效率。别急,这通常不是玄学问题,而是有一些常见的“坑”可以系统性地排查。下
Ubuntu系统下Golang程序打包体积压缩方法
在Ubuntu上使用Golang打包应用程序时,如何有效减小二进制文件体积? 对于在Ubuntu环境下进行Golang开发的工程师来说,生成的应用二进制文件体积有时会超出预期。尤其是在容器化部署或资源受限的环境中,一个精简的可执行文件往往能带来更快的分发速度和更低的资源占用。那么,有哪些经过验证的方
Ubuntu系统下Go语言打包后的版本管理实践指南
在Ubuntu上使用Golang进行版本管理 对于在Ubuntu环境下工作的Golang开发者来说,一套清晰高效的版本管理流程至关重要。这不仅关乎代码的版本追踪,更直接影响到依赖管理的可靠性与团队协作的顺畅度。下面就来聊聊几种主流的方法。 1 使用Go Modules(推荐) 自Go 1 11版本
Ubuntu系统下Golang项目打包依赖管理指南
在Ubuntu上使用Golang进行项目打包时,处理依赖关系是非常重要的。以下是处理依赖关系的步骤: 安装Go模块支持(如果尚未安装):首先,确保你的Go环境已经启用了模块支持。在终端中运行以下命令即可开启: go env -w GO111MODULE=on 这一步是基础,它让Go能够以模块化的方式
Linux系统下Golang日志记录实现方法与最佳实践
在Linux系统中为Golang应用程序集成日志记录功能,是开发过程中一项基础且重要的任务。Go语言标准库内置的log包提供了简洁高效的日志记录能力,足以满足大多数基础应用场景的需求。本文将详细介绍如何利用标准库,在Linux环境下快速构建一个稳定可靠的日志系统。 首先,我们需要创建Go程序文件。在
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

