Idea Intellij多线程调试

IntelliJ IDEA - Debug 调试多线程程序 IntelliJ IDEA - Debug 调试多线程程序 新建 MyRunnable public class MyRunnable implements Runnable { @Override public void run() { Thread currentThread = Thread.currentThread(); Sy 阅读详情

 

 weixin_34205826 最后发布于2017-11-08 10:57:00 阅读数 10  收藏

展开

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

(适用Idea 14 & 15,其他版本未知)

几天前遇到一个问题: 
在多线程调试的时候,一些断点会被跳过。

比如像下面的代码:

 
  1. public static void main(String[] args) throws InterruptedException {

  2. new Thread() { // 断点0

  3. @Override

  4. public void run() {

  5. System.out.println("1"); // 断点1

  6. try {

  7. Thread.sleep(2000);

  8. } catch (InterruptedException e) {

  9. e.printStackTrace();

  10. }

  11. System.out.println("2"); // 断点2

  12. }

  13. }.start();

  14. // 外线程

  15. System.out.println("3"); // 断点3

  16. Thread.sleep(2000);

  17. System.out.println("4"); // 断点4

  18. }

启动调试后,可能会命中断点1或者断点3,命中路径可以是3->2->4或者3->4甚至3->2,总之并不会命中全部断点。在单步调试的过程中,代码的执行速度事实上远比直接运行慢得多,所以我加入了一些sleep用来模拟这些延迟的过程。

这段代码一共有两个线程,在调试一个线程的过程中,很显然另一个线程是在运行的。所以我们可以猜测是不是Idea是不是会在我们调试一个线程时,屏蔽另一个线程的断点。 
为了验证这个观点,只需要在命中断点0处之后单步,就会到断点3,然会你调试得“慢”一点,就会发现断点1和2被跳过了。

这里写图片描述 
打钩的是我当前调试的线程(main线程),当你开始单步调试之后,这个堆栈会刷新。

这显然是不能接受的,对于多线程调试来说,最重要的就是控制两个线程的执行顺序,我们要做的其实就是当另一个不处于调试状态的线程命中断点后,能先暂停,一直等到我去处理为止。

经过一番折腾后发现,其实Idea提供了这个功能,在断点处右键 
这里写图片描述 
它提供了两种挂起的模式,默认的是All,只需要选中Thread,它就会一直等待到你处理它。 
右边的Make Default功能会使得之后打上的断点也会是Thread模式的(注意,之前打上的不会变更,需要手工更改)。 
这里写图片描述 
两个红圈的按钮就可以改,在Debug窗口的最右边。

之后就可以开心地调试了,对了,在这里切换线程 
这里写图片描述

转载于:https://my.oschina.net/u/2935389/blog/1568117

IntelliJ IDEA 多线程调试:3步解决并发问题与线程切换阻塞 本文详细介绍了如何使用IntelliJ IDEA进行多线程调试,通过3个核心步骤解决并发问题和线程切换阻塞。文章涵盖了调试模式的基础机制、线程友好的调试环境配置以及实战多线程问题诊断技巧,帮助开发者高效应对复杂的并发场景。 阅读详情

相关推荐

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 630

IDEA多线程调试

2debug运行,当需要选择线程进行调试的时候,点击左下方的按钮,选择调试的线程,点击向下运行调试即可。1需要把主线程的断点和线程中的断点修改成Thread,

Java后端技术栈 6187

树莓派与ROS2

树莓派与ROS2(Robot Operating System 2)的结合使用为机器人开发、自动化控制以及物联网项目提供了强大的平台。

weixin_47695827的博客 1756

一个 IDEA 老鸟的 DEBUG 私货之多线程调试

总结一些 IDEA 好用的技巧。本篇介绍多线程的调试。

uzong 6534

V2签名预装失败原因及解决方案

GOOGLE最新的GTS要求targetSdkVersion 大于30的APK必须使用V2及以上签名。 但实际在预装过程中,GTS测试会失败。 后面发现这是由于预装方式的原因造成的。原来的预装方式是使用APK,指定APK使用预签名的方式。Android.mk如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := DKTest LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS

zyfzhangyafei的专栏 6305

风电光伏功率预测竞赛精华总结:技术解析与实战经验

本文深度解析新能源功率预测竞赛的技术要点与实战经验。首先介绍了风电、光伏功率预测对电网调度优化、降低运营风险的重要性,以及多个竞赛的基本概况。在数据特征分析部分,详细探讨了气象预报数据和功率数据的特征,包括时间周期性、数据质量问题及处理方法。针对异常值检测、数据标准化和特征工程(如时间特征、统计聚合特征、风速风向特征和滞后特征)提供了具体的技术实现方案。文章为新能源功率预测提供了实用的技术指导,对相关竞赛和实际应用具有重要参考价值。

算法工程师 206

Idea多线程调试

不过,IDEA 提供了一些强大的工具来帮助你进行多线程调试。在IDEA中有一个设置,那就是当我们在断点处单击鼠标右键就会弹出一个设置对话框,当我们把其中的All 修改为 Thread之后,尝试重新执行debug代码,每一个线程都会进入到断点当中了。最重要的就是控制两个线程的执行顺序,我们要做的其实就是当另一个不处于调试状态的线程命中断点后,能先暂停,一直等到我去处理为止。在 Debug 窗口的 Threads 标签中,你可以看到所有正在运行的线程。执行完一个线程,会自动切换到另一个线程,继续F9执行即可。

刘皇叔说Java的博客 2670

Cadence 开发合集【总目录】

专栏主要介绍Cadence原理图和PCB信号完整性电源完整性仿真相关的内容,更加注重实操,以帮助大家轻松上手并不断提高;在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。 ............

fydar的博客 1万+

史上最全的 IDEA Debug 调试技巧(超详细案例)

Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方。

西楼的博客 2万+

图像修复的万能模型:用Instruct-IPT统一解决去雨、去雾、去模糊三大难题

从原理到实战,你已经掌握了Instruct-IPT的核心逻辑和使用方法。它不仅能一站式解决多种图像退化问题,还能通过文本指令灵活控制,是图像恢复领域的“多面手”。现在,不妨找几张有雨雪、雾霾、模糊问题的图像,用Instruct-IPT亲手试试效果。当你看到模糊的图像变得清晰,被雨雾遮挡的细节重新浮现时,你会真切感受到这项技术的魅力。后续还可以尝试调整文本指令的描述方式,看看模型的响应有什么变化——探索的过程,就是你技术进阶的最好见证。

m0_71589036的博客 227

Matplotlib之bar3d画3D柱状图

3D柱状图通常用于展示数据集中不同分类项的数据大小或数量。与普通的柱状图相比,3D柱状图更适合展示数据的三个维度 3D 柱状图 按行/列涂颜色 柱加阴影、描黑边 自定义座标轴名、刻度标签、范围

我走的每一步都算数 1123

idea开启多线程调试模式

在一些开发场景中,需要开启多线程调试模式,基于idea,代码如下 ​ package com.example.demo0423.singleton; public class Task1 implements Runnable { @Override public void run() { System.out.println("1"); System.out.println("1"); System.out.println(...

qq_28940607的博客 6735

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3131

在IntelliJ IDEA中多线程并发代码的调试方法

通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法。让你在多线程开发过程中的调试更加的有的放矢。 我们将通过一个例子来学习。在这里,我编写了一个多线程程序来计算此数学问题:100! + 100000!。即:100的阶乘 + 100000的阶乘。 数学不好的同学看这里,100 阶乘就是:1 * 2 * 3 * …… * 100 = ? ,简写为100! import java.math.BigInteger; public class MathProble

字母哥博客 4226

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IntelliJ IDEA 断点、多线程、远程调试以及stream调试——小技巧汇总

IntelliJ IDEA 早已支持 Java 8Stream调试,因为我平时也很少调试,那么我就以 IntelliJ IDEA 来演示下如何调试 Java 8 中的Stream链式调用吧。 先写一段 Java 8Stream示例: publicstaticvoidmain(String[]args){ Stream.of(100,200,300,400,500) .mapToLong(e->e*10) ...

zhangkaixuan456的博客 2536

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

idea 断点线程_在IntelliJ IDEA中多线程并发代码的调试方法

通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法。让你在多线程开发过程中的调试更加的有的放矢。我们将通过一个例子来学习。在这里,我编写了一个多线程程序来计算此数学问题:100! + 100000!。即:100的阶乘 + 100000的阶乘。数学不好的同学看这里,100 阶乘就是:1 * 2 * 3 * …… * 100 = ? ,简写为100!im...

weixin_39523835的博客 939

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

idea 断点线程_在IntelliJ IDEA中多线程并发代码的调试方法详解

通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法。让你在多线程开发过程中的调试更加的有的放矢。我们将通过一个例子来学习。在这里,我编写了一个多线程程序来计算此数学问题:100! + 100000!。即:100的阶乘 + 100000的阶乘。数学不好的同学看这里,100 阶乘就是:1 * 2 * 3 * …… * 100 = ? ,简写为100!im...

weixin_36076139的博客 1539

IntelliJ IDEA 记学习笔《多线程调试》

IntelliJ IDEA 记学习笔《多线程调试》测试代码为断点添加条件Debug 运行参考资料 在多线程情况下,各个线程进入断点完全是看心情的。 怎么才能好好的专注一个线程,方便调试呢? IntelliJ IDEA 提供的解决这群,非常简单。(其实就是我们平时用的条件断点,再多加个线程选项) 测试代码 package com.example.springbootdemo; class MyRunnable implements Runnable { // 实现Runnable接口,作为线程的实现类

灵台方寸山斜月三星洞 1536

IntelliJ IDEA 高级调试技巧及多线程调试技巧

一、条件断点 二、回到"上一步" 三、多线程调试 四、远程调试 五、临时执行表达式/修改变量的运行值 条件断点 条件断点就是当满足某个条件(通常是表达式)时,debug断点才会生效;这在循环中debug是非常有用的;例如我们想要在循环体中调试:当某个变量满足某个条件时,需要断点调试,来查看详细的执行流程及变化情况。 我们说过,IDEA中的debug功能是非常强大的,要使用条件断点也非常简单,下面这张图片中 Condition中的内容代表当name为eamon:23时,程序执行到断点处停下来。在断点的红原点处

qq_40093255的博客 8661

【IntelliJ IDEA - Debug 调试多线程程序】

使用IntelliJ IDEA Debug调试多线程程序设置步骤 一、对需要debug的地方打上debug 红点为debug的点 二、右键点击这个debug点 三、选中Thread,点击 MakeDefault 四、点击Done,设置完成,可以进行多线的debug调试了 五、观察多线的执行 ...

代号_巧克力 411

gdb 多线程调试 暂停其他线程_在IntelliJ IDEA中多线程并发代码的调试方法

通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法。让你在多线程开发过程中的调试更加的有的放矢。 我们将通过一个例子来学习。在这里,我编写了一个多线程程序来计算此数学问题:100! + 100000!。即:100的阶乘 + 100000的阶乘。 数学不好的同学看这里,100 阶乘就是:1 * 2 * 3 * …… * 100 = ? ,简写为100!...

weixin_39980841的博客 515
上一篇: Netty实战:netty 堆外内存泄露排查盛宴
下一篇: kafka如何保证数据的顺序消费
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值