IDEA的使用(三)Debug(断点调试)(IntelliJ IDEA 2022.1.3版本)

本文介绍了编程过程中遇到错误时如何通过程序调试来查找和修复,包括添加断点、运行调试、各种调试工具的使用以及处理多线程、输入数据错误等复杂场景。

编程过程中如果出现错误,需要查找和定位错误时,借助程序调试可以快速查找错误。

编写好程序后,可能出现的情况:

        1.没有bug。

        使用Debug的情况:

        2.运行后,出现错误或者异常信息,但是通过日志文件或者控制台,显示了异常信息的位置。

        3.运行后,得到了错误的结果。

        4.运行后,得到了正确的结果,但是在大量、多次运行后,出现了错误的结果。

        (例1:多线程情况下,处理线程安全问题。例2:不同格式的输入数据,出现错误结果。)

1. Debug的步骤

1.添加断点。

2.启动调试。

3.单步执行。

4.观察变量和执行流程,找到并解决问题。

1.1 添加断点

在源码文件中,在想要设置断点的代码行的前面标记行处,单击鼠标左键出现红色圆点,就设置了一个断点。再次单机红色圆点行,就可以取消断点。

1.2 运行调试

单机臭虫,Debug调试运行代码,会停在断点位置。且在调试过程中,可以动态添加或取消断点。

1.3 调试工具按钮介绍

1. 步过:

        开始运行下一步代码,不是下一个断点。且不进入方法内部。

2. 步入、强制步入:

        开始运行下一步代码,且可以进入当前这一行代码调用的方法或构造器内部。

   区别

       步入:只能进入自己写的方法或构造器内部。

       强制步入:可以进入自己写的方法或构造器内部,也可以进入SDK定义的源码中的方法内部。

3. 步出:

        跳出当前这一行代码调用的方法、构造器、源码方法

4. 运行到光标处:

        直接跳到光标所在位置。如果中间有调试标记行,那还是会先进行调试行,再跳转。

5. 恢复程序:

        

        1. 如果后面没有断点,则结束调试,直接出结果。

        2. 如果后面有断点,则直接进入下一个断点位置。

6. 停止调试:

7.查看所有断点:

        显示整个程序执行过程中添加断点的位置。

 8. 显示执行点:

        显示当前代码正在执行哪一行的断点。

9. 静音断点:

        使得当前代码后面所有断点失效,一次执行到底。

2. 多种Debug情况介绍

2.1 方法断点

在方法上设置断点,显示红色菱形块。右键单机菱形块,可以看到监视。

方法输入:默认勾选,表示进入方法时,断点可以被唤醒。

方法退出:需手动勾选,表示在方法退出时,断点也被唤醒。

方法的覆盖:

子类调用父类方法的时候,如果父类方法中方法断点,则子类运行调试时一样会进入父类方法停留调试。

例如,我们进入源码,把源码某个方法设置断点,那么,调试代码中调用这个方法的时候,就会出现断点调试。

2.2 字段断点

在类的属性声明上打断点,默认对属性的修改操作进行监控。每次修改这个属性,都会停留。

当勾选“字段访问”时,每次获取(例如打印)这个变量值,调试也会停留。

2.3 条件断点

设置断点之后,写上执行这个断点的条件。不满足条件的时候,断点不会执行。

2.4 异常断点

对异常进行跟踪,如果程序出现指定异常,程序就执行断点,自动暂停。

例如:设置出现空指针异常,就打断点。

操作:点击查看所有断点按钮,添加断点,选择Java异常断点,搜索空指针异常进行添加,看到已勾选这个断点,点击完成。下次出现这个异常,异常那一行就会出现闪电标识的断点。

2.5 线程调试

挂起线程,输入条件,执行调试到满足该条件的线程,就会暂停。

2.6 强制结束(强制返回)

调试过程中已经发现问题,不希望程序继续执行。

可以选择强制结束(Force Return),然后点击恢复恢复程序,就直接结束了。

但是,如果在程序正在调用方法,方法需要一个返回值才能结束,就会出现

这就比较麻烦了,写不出对的返回值,就只能继续执行完这个方法。

2.7 自定义调试数据视图

在调试面板的空白处右键,选择自定义数据视图。

出现这个框:

例如:

2.8 常见问题

问题:使用Step into(步入)时,会出现无法进入源码的情况,怎么办?

方案1:使用force step into(强制步入)。

方案2:点击进入如下页面,把java.*javax.*取消勾选。(不建议

使得步入和强制步入完全一样,没有区别。

Abnormal build process termination: "D:\javagj\idea\IntelliJ IDEA 2022.3.1\jbr\bin\java.exe" -Xmx700m -Djava.awt.headless=true "-Djna.boot.library.path=D:\javagj\idea\IntelliJ IDEA 2022.3.1/lib/jna/amd64" -Djna.nosys=true -Djna.noclasspath=true --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -Dpreload.project.path=E:/java_workspace/Zhgd4.0-Cloud -Dpreload.config.path=C:/Users/Administrator/AppData/Roaming/JetBrains/IntelliJIdea2022.3/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Didea.IntToIntBtree.page.size=32768 -Djdt.compiler.useSingleThread=true -Daether.connector.resumeDownloads=false -Dio.netty.initialSeedUniquifier=7903707484277119235 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2022.3 "-Didea.home.path=D:/javagj/idea/IntelliJ IDEA 2022.3.1" -Didea.config.path=C:/Users/Administrator/AppData/Roaming/JetBrains/IntelliJIdea2022.3 -Didea.plugins.path=C:/Users/Administrator/AppData/Roaming/JetBrains/IntelliJIdea2022.3/plugins -Djps.log.dir=C:/Users/Administrator/AppData/Local/JetBrains/IntelliJIdea2022.3/log/build-log "-Djps.fallback.jdk.home=D:/javagj/idea/IntelliJ IDEA 2022.3.1/jbr" -Djps.fallback.jdk.version=17.0.5 -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/Administrator/AppData/Local/JetBrains/IntelliJIdea2022.3/compile-server/zhgd-cloud_26beeabf/_temp_ -Djps.backward.ref.index.builder=true -Dtmh.instrument.annotations=true -Dtmh.generate.line.numbers=true "-Djps.kotlin.home=D:\javagj\idea\IntelliJ IDEA 2022.3.1\plugins\Kotlin\kotlinc" -Dkotlin.incremental.compilation=true -Dkotlin.incremental.compilation.js=true -Dkotlin.daemon.enabled -Dkotlin.daemon.client.alive.path=\"C:\Users\ADMINI~1\AppData\Local\Temp\kotlin-idea-3171289915408307769-is-running\" -Dide.propagate.context=false -classpath "D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/java/lib/jps-launcher.jar" org.jetbrains.jps.cmdline.Launcher "D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/java/lib/jps-builders.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/java/lib/jps-builders-6.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/java/lib/jps-javac-extension.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/util.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/util_rt.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/annotations.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/3rd-party-rt.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/protobuf.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/jps-model.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/java/lib/javac2.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/forms_rt.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/java/lib/aether-dependency-resolver.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/idea_rt.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/JavaEE/lib/jasper-v2-rt.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/Kotlin/lib/jps/kotlin-jps-plugin.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/lib/util.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/eclipse/lib/eclipse-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/eclipse/lib/eclipse-common.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/ant/lib/ant-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/JavaEE/lib/javaee-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/uiDesigner/lib/jps/java-guiForms-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/space/lib/space-java-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/devkit/lib/devkit-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/platform-langInjection/lib/java-langInjection-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/javaFX/lib/javaFX-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/javaFX/lib/javaFX-common.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/Groovy/lib/groovy-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/Groovy/lib/groovy-constants-rt.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/maven/lib/maven-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/gradle-java/lib/gradle-jps.jar;D:/javagj/idea/IntelliJ IDEA 2022.3.1/plugins/JPA/lib/jps/javaee-jpa-jps.jar" org.jetbrains.jps.cmdline.BuildMain 127.0.0.1 50210 1602d901-bd98-43c6-8a4a-967c2a85f0cd C:/Users/Administrator/AppData/Local/JetBrains/IntelliJIdea2022.3/compile-server # OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000d4400000, 536870912, 0) failed; error='页面文件太小,无法完成操作。' (DOS error/errno=1455) # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 536870912 bytes for G1 virtual space # An error report file with more information is saved as: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2022.3\compile-server\hs_err_pid42716.log
最新发布
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值