debug技巧之本地调试

debug · 浏览次数 : 0

小编点评

# My Debug Journey with IDEA Hey there, Summo here! Today, I'd like to share some insights into my coding debug process, which is far from official or a teaching guide, but hopefully, it can help you. **My IDE of Choice: IDEA** As a Java developer, I'm mostly familiar with Spring frameworks. While both front-end and back-end involve writing code, their debugging approaches differ. Front-end uses `console.log`, while Java prefers `System.out.println`. This difference arises due to the different execution speeds. **Local Debugging Magic** * **Starting Application:** Simple, just click "Debug". * **Resume Program:** Click this when paused to continue execution until the next breakpoint or program end. * **Step Over:** Single step execution, but not into the current method's methods. * **Step into:** Single step into the current method, perfect for exploring code flow. * **Force Step into:** Forcefully enter a method, useful when source code is unavailable. **Evaluating Expressions: The Power of Insights** This feature is my go-to. It lets me explore variable values, execute methods, and view complex data structures. It's a game-changer for understanding program flow and debugging errors. **Step-by-Step Guide to Debugging Java** 1. **Breakpoints:** Open the debug menu and set breakpoints wherever you want to stop the program. 2. **Resume Program:** Click this when paused to continue execution. 3. **Step Over:** Jump single step, useful for exploring code flow. 4. **Step into:** Go single step into the current method, helpful for debugging. 5. **Force Step into:** Forcefully enter a method, useful when source code is unavailable. 6. **Step Out:** Return from the current method and continue execution. **Tips for a Smooth Debug Session** * **Be mindful of where you set breakpoints:** Avoid random placements, especially near method calls. * **Use single-step debugging:** It's the key to understanding how each step works. * **Evaluate expressions:** This is a powerful tool for exploring complex data structures. **Conclusion** Debugging Java can be a challenge, but with the right tools and techniques, it becomes easier. I hope these insights help you streamline your debugging process and become a debugging pro!

正文

大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。

如果看过我文章的同学应该知道我是一个Java开发,平时都是Spring全家桶。后端和前端虽说都是写代码,但调代码的时候还是有点不同的,前端可以console.log一把梭,但是Java只用 System.out.println是不行的,原因也很简单,“前端热部署快,后端慢”,后端总是避不开断点调试的,如果还有没学会断点调试的同学,建议还是学习一下。

好了,废话不多说,开始正文~

本地调试的方式主要看使用的IDE,我平时都是用的IDEA社区版,感觉比MyEclipse和Eclipse比较好用一些。

一、debug模式启动应用

这个还是很简单的,我相信只要不是手抖都不会点错。但是有时候我们会发现平时很快就启动好的应用,突然变得特别慢,好几分钟都启动不好。一般出现这种情况的原因有可能是你将断点打在了方法上,这个IDEA官方也有说明,如下。

Note that using method breakpoints can slow down the application you are debugging.
使用方法断点会使得正在debug调试的程序变慢。

解决办法有两个
a. 找到方法上断点取消掉
b. 如果断点不好找,直接找到IDEA的BreakPoints全部取消就好了

二、调试功能

  • Resume Program(继续程序):当程序处于暂停状态时,点击这个按钮会使得程序继续执行,直到下一个断点或者程序结束。
  • Step over(单步跳过):这个按钮允许你执行当前行的代码,但是不会进入当前行调用的任何方法内部。如果当前行调用了一个方法,那么这个方法的执行会“跳过”,直接执行到这个方法的返回处。
  • Step into(单步进入):与 Step over 不同,Step into 会进入当前行调用的方法内部。如果当前行是一个方法调用,那么程序会暂停在这个方法的第一条可执行行。
  • Force Step into(强制单步进入):这个按钮允许你强制进入一个方法,即使该方法的源代码不可用(例如,它可能是一个第三方库的一部分)。通常,当尝试使用 Step into 进入一个没有源代码的方法时,IDEA 会忽略这个步骤。但是,使用 Force Step into 可以强制程序进入方法,即使没有源代码。
  • Step out(单步返回):当处于一个方法内部时,点击这个按钮会使得程序执行完当前方法的剩余部分,并在方法返回时暂停。这允许你快速退出当前的方法,返回到调用它的代码中。

这些调试功能对于理解程序的执行流程和调试程序中的错误非常有帮助。自己可以多试试。

三、 Evaluate Expression

这个功能是我用的最多的,非常好用,强烈推荐!!!

1. 它在哪?

进入debug后,代码区右键打开菜单

2. 它长啥样?

上面是输入框,下面是输出

3. 它有什么作用?

  • 查看变量值
  • 修改变量值
  • 执行方法
  • 查看复杂数据结构
  • 调试信息输出
  • ... ...
    不仅上面这些,它甚至可以写一段新的代码执行,我演示几个吧,不然没感觉。

(1)查看变量值


(2)执行方法


(3)新的代码块

四、小结一下

调试Java程序,用IDEA社区版挺方便的。设置断点的时候别太随意,否则启动程序会慢得跟蜗牛似的。用好单步调试,能帮你一步步看清楚程序是怎么跑的。还有那个表达式评估,简直就是调试时的万能钥匙,啥都能干。最后,记得多学多练,调试这门手艺,越磨越亮。

与debug技巧之本地调试相似的内容:

debug技巧之本地调试

大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 如果看过我文章的同学应该知道我是一个Java开发,平时都是Spring全家桶。后端和前端虽说都是写代码,但调代码的时候还是有点不同的,前端可以con

debug技巧之使用Arthes调试

一、前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 前面我介绍了本地调试和远程调试,今天再加一种:利用Arthes进行调试。 二、Arthes是什么? 以下是Arthes官网原文: 通常,本

debug技巧之远程调试

一、前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 当我们的应用发布到线上之后,就不能随意启停了,但如果线上出现了BUG怎么办呢?大多数时候我们会借助线上打印的日志进行排查问题,如果幸运的话

[转帖]gdb进阶调试技巧

https://www.jianshu.com/p/9bdaa0644dba 整理一下在linux下C/C++用gdb工具debug一些提高效率的操作。基本的gdb操作就不在这里赘述了。 打印各种变量x 命令在gdb中可以使用x命令,来打印内存中的值。具体的格式是x/nfu addr。 含义为以f格

顺应潮流,解放双手,让ChatGPT不废话直接帮忙编写可融入业务可运行的程序代码(Python3.10实现)

众所周知,ChatGPT可以帮助研发人员编写或者Debug程序代码,但是在执行过程中,ChatGPT会将程序代码的一些相关文字解释和代码段混合着返回,如此,研发人员还需要自己进行编辑和粘贴操作,效率上差强人意,本次我们试图将ChatGPT直接嵌入到代码业务中,让ChatGPT生成可以直接运行的代码。

我的日常AI使用

从去年年初开始,AI技术真正走入了我们的日常生活。从OpenAI到如今字节跳动的coze,我们通过AI大模型可以做很多事情,工具和平台众多,如何选择和使用有必要总结一下。 编程和debug方面 尽管gpt-4和gpt-4o确实很强,但对于持续代码改进和代码调试方面,依然不够好,并且它对于非Plus会

我又学会了使用Range实现网络文件下载的断点续传

目录前言1、Range请求头1.1、概述1.2、使用限制1.3、范围请求1.4、预防资源变更2、断点续传下载实现2.1、流程设计2.2、代码实现2.3、运行结果3、RandomAccessFile4、思维拓展参考资料 前言 在某次摸鱼的过程中,老大突然后面冒出来说要做一个拉取文件到本地的需求(写的时

Yolov8和Yolov10的差异以及后处理实现

Yolo模型可分为4个维度的概念 模型版本、数据集、模型变体(Variants)、动态/静态模型。 Yolo各模型版本进展历史 Yolov(2015年华盛顿大学的 Joseph Redmon 和 Ali Farhadi 发布)Yolov2(2016年Joseph Redmon发布)Yolov3(20

KU FPGA FLASH boot失败debug

原因 新板子回来后,测试flash 烧录正常,但是无法BOOT,此时SPI设置为X4模式,使用内部时钟,速度90M。烧录过程不报错,校验也正常。 FLASH理论支持最大速度108M,90M应该还好。另外板卡预留了EMCCLK外部时钟模式,速率100M 也不可行。 此时约束如下: set_proper

[转帖]打造自己的K8s debug image

https://cloud.tencent.com/developer/article/1932186?areaSource=&traceId= 生产上,有时候为了便于调试,会需要用到一些dig curl等工具,这里提供一个很好用的 docker image 集成了如下工具: tcpdump hto