Idea断点调试(debug)详解

傷城~ 2023-09-27 08:29 155阅读 0赞

目录

  • 1.打断点,并启动
  • 2.按钮介绍
    • 1.测试程序
    • 2.Step Over
    • 3.Step Into
    • 4.Force Step Into
    • 5.Step Out
    • 6.Drop Frame
    • 7.Run to Cursor
    • 8.Evaluate Expression
    • 9.Resume Program
    • 10.Stop
    • 11.View BreakPoints
    • 12.Mute BreakPoints
  • 3.断点分类
    • 1.方法断点
    • 2.属性断点
    • 3.异常断点
    • 4.条件断点
    • 5.流断点
    • 6.多线程断点

1.打断点,并启动

打断点:

鼠标左键点击这里就会出现一个红点标志 593bb09d6559442f801adebe0334642b.png(有各种形状,后续解释),就打上了一个断点。

0c8008adcb904b93a8911688bfc0dcc3.png

启动:

  • 对于已经运行过的程序,直接点击,小虫子就能启动
    585e7eb1736b48ca98249ebc1047bc94.png
  • 对于没有运行过的程序,找到程序入口(main方法)前面的三角形 ffc9786400ab4f399d7a75406b789e5d.png ,鼠标右键启动

ba938760f94c49a6b195f86ea28ca989.png

启动后,当我们的程序执行到断点程序处,就会出现调试界面,如下:
9bceecd5845f40759db485a209e758ec.png

如果没有出现调试界面,那就是说明:根本没有执行断点处的程序。

2.按钮介绍

1.测试程序

先写一个简单的类来做测试,如下:

  1. public class TestDemo {
  2. public static int add(int a, String b) {
  3. int c = Integer.parseInt(b);
  4. return a + c;
  5. }
  6. public static char sub(int d, int e) {
  7. char res = (char) Math.abs(d - e);
  8. return res;
  9. }
  10. public static void main(String[] args) {
  11. String b = "45";
  12. int a = 13;
  13. int sum = add(a, b);
  14. int d = 17;
  15. int e = 89;
  16. char f = sub(17, 89);
  17. }
  18. }

接着,找个地方打上断点(确保程序会执行的地方)打上断点:
de15803efede44a082fe4b6ed3cf714f.png

然后开始debug。

2.Step Over

步过:
818cc7ce145d41ae9bdcef5c5c57010f.png

作用:

  • 一行代码一行代码地往下执行
  • 不会进入到路经的方法里面

3.Step Into

步入:
0b31e26143c54b7bbb9b4b4740998927.png

作用:

  • 进入我们自定义的方法
  • 不会进入其他类库的方法

4.Force Step Into

强制步入:
0e8f3a23f25a43f5871e9cf0b3c8faf4.png

作用:

  • 可以进入更深层次的方法
  • 自定义类库或者其他类库的方法都能进入

5.Step Out

步出:
f6dde1f8cf9b407894361def369e8444.png

作用:

  • 从对应的方法中出来,返回上一层

6.Drop Frame

回退断点:
6185763580dc44ada501ee26bd813e0f.png

作用:

  • 当进入到更深层的方法后才能使用
  • 当我们错过了debug的位置时使用
  • 这个按钮可以让焦点回到调用方法之前,然后再次debug一次方法(给你犯错重来的机会)
  • 对于数据库增删改操作无法回退

注意: 此回退仅限于,那个方法还没有调用完,否则是无法回去的再次debug那个方法的,只能重新启动debug。

7.Run to Cursor

跳到光标处
0e8e17e3448443ebafb86ca79abe080c.png

作用:

  • 将debug执行位置跳转到光标位置,然后继续debug
  • 只能往后面跳,如果光标在debug执行位置前面,就会终止debug

8.Evaluate Expression

表达式计算:
cbbe365175bd450a9031923e51e0ea01.png

作用:

  • 获取已经debug过的参数的值
    2fca4355ee95435f9bafd06626750afb.png5087fb99fb1640179693f79853f3a05d.png
  • 计算已经debug过的参数的值(表达式、方法)
    683aa8e7e5c846608c4d7a2d1f33e548.pngef4daca9865c408b9dbea737d289226e.png

9.Resume Program

恢复程序:
b55ce198cf244930b25a84d1659c0277.png

作用:

  • 当有多个断点时使用
  • 直接跳转到下一个断点的位置
    8d5eb511d99b43d0b735d13b44c9fd87.png

10.Stop

停止程序:
929b38b98d5a41a7b20a10b44931f4e1.png

作用:

  • 停止debug
  • 会继续跑完程序

11.View BreakPoints

查看断点:
17a6517ef1cc4809a592e9b9e99bc95e.png

作用:

  • 查看所有断点,并进行相关设置
    cbf38d1722b9424da1c9922723615a9a.png

12.Mute BreakPoints

禁用断点:
6fe51753151e4650982497c804535a90.png

作用:

  • 暂时禁用掉所有断点,放行程序

3.断点分类

1.方法断点

2f593ec753bc48fb9ef1920493dfffc2.png

给方法打上断点之后,当我们的debug到调用该方法的位置的时候,会直接跳转到方法处(直接Step Out就会跳转)。

2.属性断点

e8f8464e2fe2423e8ac6b4f05f8fdd2f.png

断点右键可以进行设置:
c0e4e7fe7b0e46b982c1aeef34807c2f.png

3.异常断点

添加异常断点流程:

a50f0b1911124b0790c8de517b074990.png e042b322165e4d70831a4debef096c08.png f8a129b5d6c640459684a0f704217b21.png

作用:

  • 在全局打上异常(上述添加的是堆栈溢出异常)
  • 只要哪里出现了堆栈溢出异常,程序就会跳转到那个地方,方便快速找到异常位置
  • 可在run程序抛出异常后,根据异常去打断点,然后进行调试

4.条件断点

右键断点,设置条件,只有当满足条件时,才会进入该断点程序停留,否则就直接往下面执行程序。

c4e104aca36c4d05881908d6e73f4371.png

5.流断点

调试流程:

  • 代码:

    1. public static void main(String[] args) {
    2. Stream.of(10, 30, 50, 90, 40)
    3. .mapToLong(e -> e*e )
    4. .filter(e -> e > 2500)
    5. .forEach(System.out::println);
    6. }
  • 断点调试:
    c19ca7bbe7d2405885402f4db465eaff.png
    af4f6777789143c8a1806089653a3b7d.png

作用:

  • 可以查看流的工作流程

6.多线程断点

调试流程:

  • 代码:

    1. public static void main(String[] args) {
    2. new Thread(() -> {
    3. System.out.println();
    4. System.out.println("thread1 is running");
    5. StringBuilder sb = new StringBuilder(".");
    6. for (int i = 0; i < 10; i++) {
    7. try {
    8. Thread.sleep(100);
    9. System.out.print(sb.append(".").toString());
    10. } catch (InterruptedException e) {
    11. e.printStackTrace();
    12. }
    13. }
    14. }, "thread1").start();
    15. new Thread(() -> {
    16. System.out.println();
    17. System.out.println("thread22 is running");
    18. StringBuilder sb = new StringBuilder(".");
    19. for (int i = 0; i < 10; i++) {
    20. try {
    21. Thread.sleep(100);
    22. System.out.print(sb.append(".").toString());
    23. } catch (InterruptedException e) {
    24. e.printStackTrace();
    25. }
    26. }
    27. }, "thread22").start();
    28. new Thread(() -> {
    29. System.out.println();
    30. System.out.println("thread333 is running");
    31. StringBuilder sb = new StringBuilder(".");
    32. for (int i = 0; i < 10; i++) {
    33. try {
    34. Thread.sleep(100);
    35. System.out.print(sb.append(".").toString());
    36. } catch (InterruptedException e) {
    37. e.printStackTrace();
    38. }
    39. }
    40. }, "thread333").start();
    41. }
  • 断点:
    4d5ce51d65c54c04b935de8a2fd8a3fd.png70f586a31f104b45844238bc474e5296.png
  • 查看输出:
    bc4e38d578cc4ec7b9ca463a102b4ff3.png

作用:

  • suspend 设置为 Thread
  • 这样就可以单个线程单个线程地调试,而不会出现,线程之间争抢资源的情况(线程不断切换)

发表评论

表情:
评论列表 (有 0 条评论,155人围观)

还没有评论,来说两句吧...

相关阅读

    相关 20、断点调试debug

    1、基本介绍: (1)断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程可以看各个变量当前的值,出错的话,调试到出

    相关 Ideadebug断点调试

    关于Idea的debug模式下线程断点的总结: 断点介绍: ![img][] 如图所示,断点可以为所有断点和线程断点,每种断点还可以设置条件,条件满足时才会进入该断点