jdb调试程序

简介: 1) jdb调试正在运行的进程: 先使用jps先确定进程号,然后让jdb连接上目标进程(23549换成实际的进程号): jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=23549 接着,可以使用thread N切换线程(使用threads命令可以查看有哪些线程),如:thread 1,然后就可以使用where命令查看调用栈了(jdb中的where相当于gdb的bt)。
1) jdb调试正在运行的进程:
先使用jps先确定进程号,然后让jdb连接上目标进程(23549换成实际的进程号):
jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=23549


接着,可以使用thread N切换线程(使用threads命令可以查看有哪些线程),如:thread 1,然后就可以使用where命令查看调用栈了(jdb中的where相当于gdb的bt)。


2) jdb调试未运行的程序:
程序代码:
hadoop@hadoop-137-143:~/hbase> cat Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
编译:
hadoop@hadoop-137-143:~/hbase> javac Hello.java  


运行:
hadoop@hadoop-137-143:~/hbase> java Hello
Error: Could not find or load main class Hello


运行报错,设置CLASSPATH后再运行:
hadoop@hadoop-137-143:~/hbase> export CLASSPATH=.
hadoop@hadoop-137-143:~/hbase> java Hello
Hello World!


运行成功了,如果不想设置CLASSPATH,下面这样也可以运行成功:
hadoop@hadoop-137-143:~/hbase> java -classpath . Hello
Hello World!
也就是利用参数“-classpath”达到同样的效果。


开始调试,执行下面命令进入jdb:
jdb -classpath . Hello


设置断点在main()函数:
> stop in Hello.main
Deferring breakpoint Hello.main.
It will be set after the class is loaded.


运行到断点:
> run
run Hello


运行下一步:
main[1] next
> Hello World!


退出:
main[1] quit


相关文章
|
缓存 监控 Python
在Python中,如何检测和处理内存泄漏?
【2月更文挑战第7天】【2月更文挑战第18篇】在Python中,如何检测和处理内存泄漏?
1034 3
|
SQL 安全 网络协议
常用和不常用端口一览表收藏
大家在学习计算机的时候,对于最常用的几个端口比如80端口肯定有很深的印象,但是对于其他一些不是那么常用的端口可能就没那么了解。所以,在一些使用频率相对较高的端口上,很容易会引发一些由于陌生而出现的错误,或者被黑客利用某些端口进行入侵。
4962 0
|
7天前
|
人工智能
天啊!COM域名要涨价了,抓紧注册、续费和转入,目前还有优惠活动!
.COM域名因Verisign批发价上调将全面涨价!阿里云推出限时优惠:新注册低至77元/年,续费享9折起,批量转入最低76元/个。还可领8元红包、AI邮箱及多档折扣,建议趁涨价前抢注、续费或转入阿里云锁定低价。
333 0
|
7月前
|
人工智能 架构师 程序员
AI真的会抢走工作吗?Anthropic最新研究给出了第一份真实数据
Anthropic最新报告《AI对劳动力市场的影响》基于真实使用数据、职业任务与统计分析,揭示AI尚未导致失业,但正加速重塑白领岗位:程序员75%任务可被覆盖,而厨师、维修工等物理型职业几乎不受影响;AI当前主攻“增强”而非“替代”,但初级岗位招聘已下降14%。
Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总
Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1831 1
|
存储 安全 Java
jdk21的外部函数和内存API(MemorySegment)(官方翻译)
本文介绍了JDK 21中引入的外部函数和内存API(MemorySegment),这些API使得Java程序能够更安全、高效地与JVM外部的代码和数据进行互操作,包括调用外部函数、访问外部内存,以及使用不同的Arena竞技场来分配和管理MemorySegment。
942 2
jdk21的外部函数和内存API(MemorySegment)(官方翻译)
|
存储 监控 关系型数据库
监控 PostgreSQL 的性能指标
监控 PostgreSQL 的性能指标
904 3
|
安全 Java Shell
"SpringBoot防窥秘籍大公开!ProGuard混淆+xjar加密,让你的代码穿上隐形斗篷,黑客也无奈!"
【8月更文挑战第11天】开发SpringBoot应用时,保护代码免遭反编译至关重要。本文介绍如何运用ProGuard和xjar强化安全性。ProGuard能混淆代码,去除未使用的部分,压缩字节码,使反编译困难。需配置ProGuard规则文件并处理jar包。xjar则进一步加密jar包内容,即使被解压也无法直接读取。结合使用这两种工具可显著提高代码安全性,有效保护商业机密及知识产权。
2304 3

热门文章

最新文章