一、适用场景
对象数组的个数比较多(几百个甚至上千个),核对的数据的时候,一层一层的对比数据,很麻烦,所以,如果我们需要将代码运行过程中的数据进行打印出来,是不是就能更直观的表现出来呢?0.0
二、方法
调试的时候,我们再“断点” 中可以选择自己想要分析的断点;
在出现对象集合的位置下断,这时,监视窗口可以看到对象集合的所有的数据,右键点击 该对象,选择“更改值”,会弹出对话框,显示我们可以键入一些java代码(下面我称之为脚本),可以将自己感兴趣的数据成员输出到自定义文件中,类似windows里面的Hook.
三、关键注意点
3.1 在脚本的最后一句一定要是返回本对象,如:当前对象为MyClassInstances,脚本最后一句一定要是 return MyClassInstances。
3.2 脚本中所有的数据类型都要用全称,否则识别不了,如 :java.io.FileOutputStream。
3.3 打印函数是无效的,System.out.println(str);在控制台输出不了信息。
3.4 脚本中最好使用软件本身的函数(使用jd-gui看)进行获取对象的数据,直接访问对象的成员会报错;
四、脚本例子:打印对象的数据到文件中;
当前对象集合为:MyClassInstances 想要获取它的每个成员 Instance (类型 MyInstance)下的成员变量index的值;
java.io.File f1 = new java.io.File("E:/File/FileName.txt");
if(f1.exist() == false)
{
f1.getParantFile().mkdirs();
}
java.io.FileOutputStream fos = new java.io.FileOutputStream(f1);
java.io.BufferWriter rd = new java.io.BufferWriter(new java.io.OutputStreamWriter(fos, "utf-8"));
int index;
for(int rowTemp = 0; rowTemp != signals.size(); rowTemp++)
{
MyInstance instance = this.getInstance(rowTemp); //MyInstance 为每个成员的类型
index = instance .getSlotIndex();//软件自己的获取数据的方式,类似于 MyInstance.index
java.lang.String sIndex = java.lang.String.value(index);
System.out.println(sIndex);// 这里控制台是打印不出内容的
rd.write(sIndex);
}
rd.close();
fos.close();
return MyClassInstances; // 返回本对象集合
其实脚本就是一个java的字符串输出到文件。