简单的调试功能

简单的代码做例子

  1. package serialize;
  2. import java.io.Serializable;
  3. public class User implements Serializable{
  4. private String name;
  5. public void setName(String name) {
  6. this.name = name;
  7. }
  8. public String getName() {
  9. return name;
  10. }
  11. }
  1. package serialize;
  2. import org.jetbrains.annotations.NotNull;
  3. import java.io.*;
  4. public class Main {
  5. public static void main(String[] args) throws Exception{
  6. User user = new User();
  7. user.setName(("m0re"));
  8. byte[] serializeData = serialize(user); // 创建是一个字节型的数据
  9. FileOutputStream f_out = new FileOutputStream("user.bin");
  10. f_out.write(serializeData);
  11. f_out.close();
  12. User user2 = (User)unserialize(serializeData);
  13. System.out.println(user2.getName());
  14. }
  15. public static byte @NotNull [] serialize(final Object obj) throws Exception {
  16. ByteArrayOutputStream byte_out = new ByteArrayOutputStream(); // 创建一个32字节(默认大小)的缓冲区
  17. ObjectOutputStream objOut = new ObjectOutputStream(byte_out); // 通过传入byte字节流来存储写入的对象
  18. objOut.writeObject(obj); // 将对象写入流中
  19. return byte_out.toByteArray(); // 创建一个新分配的字节数组。数组的大小和当前输出流的大小,内容是当前输出流的拷贝。
  20. }
  21. public static Object unserialize(final byte[] serialized) throws Exception {
  22. ByteArrayInputStream bytein = new ByteArrayInputStream(serialized); // 接收字节数组作为参数创建
  23. ObjectInputStream objIn = new ObjectInputStream(bytein); // 从输入流中读取Java对象
  24. return objIn.readObject();
  25. }
  26. }

设置断点,为了看清楚整个执行过程,故断点设置在第一句代码处

🧇IDEA调试技巧 - 图1然后开启Debug

🧇IDEA调试技巧 - 图2 1. 表示一步步的向下运行代码,不会走到任何方法中。

  1. 表示一步步的向下运行代码,不会走到任何系统类库的方法中,但是会走入自定义的方法中。
  2. 表示一步步的向下运行代码,会走入系统类库的方法中,也会走入自定义的方法中。
  3. 表示跳出方法。
  4. 运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。

然后再看这边的调试过程

🧇IDEA调试技巧 - 图3可以看到走到了第二步,user的值是空的,说明这里还没开始执行下一行,user还没完成赋值。此时如果需要测试其他的值,可以手动赋值,同时不会影响代码。但是实际执行是根据调试时提交的值继续进行下一步的。

🧇IDEA调试技巧 - 图4

修改值

🧇IDEA调试技巧 - 图5上面的值是不影响的。继续走

🧇IDEA调试技巧 - 图6到最后一步,仍然是admin当参数来执行的。

…..