JDB渗透工具_java渗透工具
作者:hacker | 分类:密码破解 | 浏览:89 | 日期:2022年07月14日文章目录:
如何查看 HotSpot VM 的运行时数据
首页
所有文章
资讯
Web
架构
基础技术
书籍
教程
Java小组
工具资源
如何查看HotSpot VM的运行时数据
2016/09/27 | 分类: 基础技术 | 0 条评论 | 标签: HSDB, JVM
分享到:11
原文出处: 占小狼
本文将借助HSDB工具分析HotSpot VM的运行时数据,运行的java环境为jdk1.8。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Test {
static String version = "1.0";
String name;
int id;
Test(String name, int id) {
this.name = name;
this.id = id;
}
static void fn() {}
void fn2(){}
}
public class Main {
static Test t1 = new Test("java", 1);
private Test t2 = new Test("java", 2);
public void fn() {
Test t3 = new Test("java", 3);
}
public static void main(String[] args) {
new Main().fn();
}
}
运行上述代码,会在Java堆中生成3个Test对象,变量t1,t2,t3分别存储在方法区、实例字段和局部变量表中,那么Test对象的内存是如何布局的呢?
在查看运行时数据之前,需要让程序刚好执行完new Main().fn();并暂停,平时可能习惯了在Eclipse、IntelliJ IDEA、NetBeans等Java IDE里使用Java层调试器,但为了减少对外部工具的依赖,本文将使用Oracle JDK自带的jdb工具来完成此任务。
jdb使用步骤如下:
1、jdb -XX:+UseSerialGC -Xmx10m命令启动jdb;
2、stop in Main.fn命令指定在方法入口设置断点;
3、run Main命令指令主类,启动java程序;
4、next命令可以向前执行一步;
采用jps命令查看目前调试java程序的PID
采用命令java -cp sa-jdi.jar sun.jvm.hotspot.HSDB启动HSDB工具,并连接到目标进程上,注意:Windows上Oracle JDK7才可以用HSDB。
连接上之后
默认窗口是Java Threads,显示当前进程的线程列表,双击线程打开一个Oop Inspector窗口,显示该线程在HotSpot VM的对象。
在菜单里选择Windows - Console,打开HSDB里的控制台,用命令查看更多信息。
1、命令universe查看GC堆的大小、地址范围和使用情况;
1
2
3
4
5
6
7
hsdb universe
Heap Parameters:
Gen 0: eden [0x00000000ff600000,0x00000000ff6d50a0,0x00000000ff8b0000) space capacity = 2818048, 30.964980014534884 used
from [0x00000000ff8b0000,0x00000000ff8b0000,0x00000000ff900000) space capacity = 327680, 0.0 used
to [0x00000000ff900000,0x00000000ff900000,0x00000000ff950000) space capacity = 327680, 0.0 usedInvocations: 0
Gen 1: old [0x00000000ff950000,0x00000000ff950000,0x0000000100000000) space capacity = 7012352, 0.0 usedInvocations: 0
可以发现HotSpot在1.8的Java堆中,已经去除了Perm gen区,由youyoung gen和old gen组成。
2、命令scanoops查看指定类型的实例对象,接受两个必选参数和一个可选参数:必选参数是要扫描的地址范围,一个是起始地址一个是结束地址;可选参数用于指定要扫描什么类型的实例对象;
hsdb scanoops 0x00000000ff600000 0x0000000100000000 Test
0x00000000ff6caf08 Test
0x00000000ff6caf40 Test
0x00000000ff6caf58 Test
通过执行结果可以看出,Java堆上的确有3个Test实例对象,对象的开始地址分别为0x00000000ff6caf08、0x00000000ff6caf40和0x00000000ff6caf58。
.jdb是什么文件
JDB是基于文本和命令行的调试工具(例如Sun JDB);虽然现在有一些很好的调试工具JDB渗透工具,然而 Java 调试器 (JDB) 提供了一些优点。最重要的是 JDB 可以免费获取并且是平台独立的。其缺点是它只有命令行格式JDB渗透工具,一些开发人员认为这很原始JDB渗透工具,而且难以使用。一些 IDE 已经将 GUI 界面构建到 JDB 调试 API(如 Jikes)。JDB 是 JDK 安装的一部分。它在 Java 2 平台中得到了增强。有关详细信息,请参考关于 Java 调试 API 的章节
JDB啥意思
JDB是基于文本和命令行的调试工具(例如Sun JDB);虽然现在有一些很好的调试工具,然而 Java 调试器 (JDB) 提供了一些优点。最重要的是 JDB 可以免费获取并且是平台独立的。其缺点是它只有命令行格式,一些开发人员认为这很原始,而且难以使用。一些 IDE 已经将 GUI 界面构建到 JDB 调试 API(如 Jikes)。JDB 是 JDK 安装的一部分。它在 Java 2 平台中得到了增强。
JDB是什么意思
JDB:就是无油滑动轴承、石墨铜套JDB渗透工具的简称。是在高力黄铜的基体上JDB渗透工具,镶嵌石墨或MoS2固体润滑剂的一高性能固体润滑产品。它突破了一般轴承依靠油膜润滑的局限性。在使用过程中JDB渗透工具,通过摩擦热使固体润滑剂与轴摩擦,形成油、粉末并存润滑的优异条件,既保护轴不磨损,又使固体润滑特性永恒。它的硬度比一般铜套高一倍,耐磨性能也高一倍。目前已广泛运用于冶金连铸机,列车支架、轧钢设备、起重机械、模具导套、矿山机械、船舶、轮机等高温、高载、低速重载等场合使用。
JDB是基于文本和命令行的调试工具(例如Sun JDB);虽然现在有一些很好的调试工具,然而 Java 调试器 (JDB) 提供了一些优点。最重要的是 JDB 可以免费获取并且是平台独立的。其缺点是它只有命令行格式,一些开发人员认为这很原始,而且难以使用。一些 IDE 已经将 GUI 界面构建到 JDB 调试 API(如 Jikes)。JDB 是 JDK 安装的一部分。它在 Java 2 平台中得到了增强。
jdb什么意思?
JDB是基于文本和命令行JDB渗透工具的调试工具(例如Sun JDB)。
虽然有一些很好JDB渗透工具的调试工具,然而 Java 调试器 (JDB) 提供JDB渗透工具了一些优点。最重要的是 JDB 可以免费获取并且是平台独立的。
相关信息:
其缺点是它只有命令行格式,一些开发人员认为这很原始,而且难以使用。一些 IDE 已经将 GUI 界面构建到 JDB 调试 API(如 Jikes)。JDB 是 JDK 安装的一部分。它在 Java 2 平台中得到了增强。
JDB还有很多的调试手段,除了上面那些最常用的,其他很重要的还有clear清除断点,use设置源程序路径,memory显示当前内存使用状况,gc强制进行内存回收,重复上面的命令,thread设置当前线程,quit和exit退出jdb等,还有远程调试等内容,都很有用。
有玩JDB的吗??
j是基于文本和命令行的调试工具;虽然现在有一些很好的调试工具JDB渗透工具,然而 ) 提供JDB渗透工具了一些优点。
最重要的是可以免费获取并且是平台独立的。其缺点是它只有命令行格式,一些开发人员认为这很原始,而且难以使用。一些 已经将平台中得到了增强。
由上往下输入【 y 】
由上往下输入【 x】
由上往下输入【 g 】
由上往下输入【 j 】
由上往下输入【 y】
由上往下输入【 l 】
由上往下输入【 1】
输出表达式的值(与 同) 表达式 - 为字段/变量/数组元素指定新值 - 输出当前堆栈帧中的所有局部变量