Debug技巧

摘要:
为了观察多个线程和锁获取之间变量的不同状态,多线程调试有时会考虑在代码中添加断点进行调试。有一个开关。它在Eclipse中默认启用,在IntelliJIDEA中默认不启用。在将线程挂起设置为与Eclipse模式相同之后,还可以开始调试多线程应用程序。当一个线程断开连接后,它可以通过在Debug-˃Frame窗口中切换来继续在其他线程中运行。在IDE中,向后执行称为DropFrame。删除当前帧后,将不会恢复更改的变量值。

多线程调试

有些时候为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下。 

在IDE里断点停下来的时候,可以切换到另外的线程中,跑其他的代码,不会互相影响。这里是有个开关的,在Eclipse里默认开启,

在IntelliJ IDEA里默认是没有开启的。也就是说如果你在IDEA里代码里加断点,虽然一个线程的断了下来,但其他线程的已经执行过了。此处把线程的suspend设置成和Eclipse模式一样之后,也可以开始多线程应用的调试。简单设置可以直接在断点处,将suspend改成Thread。

Debug技巧第1张

一个线程断下来之后,可以通过在Debug->Frame窗口切换,到其它线程中继续运行。

PS:创建线程时建议起一个有意义的名字,否则在调试的时候都不能区分出哪个是自己的线程。

Debug技巧第2张

后退执行

在IDE里被称为Drop Frame。给你重新一次机会进入当前方法,回退至调用处。

 Debug技巧第3张

我们在Drop 了当前这个Frame之后,已经改变的变量值不会恢复。比如你向当前调用方法里传入了一个List,并且在方法中向List里添加了内容,那在Drop到调用该方法的地方时,List不会恢复到之前的状态。但是在该方法再次被调用时,你可以观察List什么时候被改变的,至少不需要再重跑一遍程序了。甚至你可以一言不合就后退。

条件断点

为了调试代码,就需要在要观察变更的地方添加断点,然后小心翼翼的一步步执行。但是如果是在一个循环里,又或者该方法会被多线程同时调用到的时候,你小心的向下单步调试,发现没有你关心的内容,又从循环开始处跑下来,还是没你的内容,人就开始烦燥起来。

其实,在添加断点的时候,我们可以为断点增加一定的条件,这样,在指定的条件满足时,断点才会生效。

Debug技巧第1张

设置值&执行代码段

Debug技巧第5张

免责声明:文章转载自《Debug技巧》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 拼接字符串的几种方式和性能领域驱动设计概念(Domain-driven Design), Flower(响应式微服务框架)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VSCode调试vue项目

先决条件 首先你必须安装好 Chrome 和 VS Code。同时请确保自己在 VS Code 中安装了 Debugger for Chrome 扩展的最新版本。 在使用 VS Code 调试 Vue 组件之前,我们需要更新 webpack 配置以构建 source map。这会确保我们在一个应用中调试,即便资源已经被 webpack 优化过了也没关系。...

jvm参数优化

一、HotSpot JVM 提供了三类参数 现在的JVM运行Java程序(和其它的兼容性语言)时在高效性和稳定性方面做的非常出色。例如:自适应内存管理、垃圾收集、及时编译、动态类加载、锁优化等。虽然有了这种程度的自动化(或者说有这么多自动化),但是JVM仍然提供了足够多的外部监控和手动调优工具(允许命令行参数可以在JVM启动时传入到JVM中)。在有错误或低...

多线程并发详解

一、Java 线程实现/创建方式   注意:   • 新建的线程不会自动开始运行,必须通过start( )方法启动   • 不能直接调用run()来启动线程,这样run()将作为一个普通方法立即执行,执行完毕前其他线程无法并发执行   • Java程序启动时,会立刻创建主线程,main就是在这个线程上运行。当不再产生新线程时,程序是单线程的  1.1 继承...

ManualResetEvent 与 AutoResetEvent 的理解和使用

在多线程开发中,时常用到ManualResetEvent 与AutoResetEvent 。 它们如同道路交通中的信号灯。两者之间有什么区别呢? 共同点: 均继承EventWaitHandle 接口,因此,均具有以下功能: Reset() //红灯 Set() //绿灯 WaitOne() // 等待信号 ManualResetEvent mre = ne...

多核时代,还在使用任务管理器来看程序的性能吗?

是否为了一个程序只占用了13%的CPU利用率而沾沾自喜呢? 别忘了现在是多核时代,四核,超线程的i7. 单个线程最多只能占到12.5%的CPU利用率。 忘记这个简单的CPU利用率吧,多核时代,你需要具体知道到每个线程的利用率。 这篇博客,来源一个刚刚遇到的问题。 背景是我们正在针对Windows Media Player开发一些东西,具体是什么不重要。...

浅谈 linux 多线程编程和 windows 多线程编程的异同

原文:http://software.intel.com/zh-cn/blogs/2011/03/24/linux-windows/ 很早以前就想写写linux下多线程编程和windows下的多线程编程了,但是每当写时又不知道从哪个地方写起,怎样把自己知道的东西都写出来,下面我就谈谈linux多线程及线程同步,并将它和windows的多线程进行比较,看看他...