
返回断点处:

设置debug配置:


1.勾选Attach memory agent

2.计算对象大小(但是大小有限制,对象太大,计算不出来)
3.对象太大,可能会报错:

4.成功计算对象大小:


相当于没打断点,但起到了断点的作用:

1.Trace Current Stream Chain,调试lambda表达式:

2.有两种模式:
3.Flat Mode模式截图:

4.Split Mode模式截图:

5. 总体来说用处比较局限,因为一般通过流处理的对象都比较大,太大了idea就不支持了。

断点处点击鼠标右键:

在for循环中,条件表达式中的i往往要循环多次,点击断点右键即可出现条件面板,当i取模为2时执行debug,这样就可以在调试的时候将程序停在我们想要停的地方。具体如图所示:

我们在调试的时候,无论是对某个变量或者方法进行调试时,debugger都会表明该断点调试所在的线程。
当我们要指定调试某个线程时,可以在条件面板中指定需要调试的线程名,具体如图所示:

1.设置断点类型为Thread:

2.设置Allow multiple instances,允许多个实例:

3.最终:
使用All的模式,所有进入代码的线程,都会依次卡在第一个断点上,如果不放行,任意一个线程都不进入到下一步。如果是Thread的模式,那么就会每个线程进行依次进行调试,依次进入各自的断点中。

我们在调试的时候,除了看代码中的变量、方法的执行过程外,有的时候还想看看与之相关的堆栈信息。
看看代码在运行的同时,堆栈里发生什么变化。
点击断点右键,More(Ctrl+Shift+F8) 调出更为详细的配置面板,勾选“断点信息”与“堆栈”即可。如下图所示:

点击调试后的效果如下图所示:
当我们在调试时,如果在某个方法内有许多行代码,而你只想调试其中的某一行代码,不接着往下调试,那么可以选择debug的Force return(强制返回),就可以跳过后面的代码执行直接跳出方法。具体如下图所示:

结果只调试了指定的一行代码,具体效果如下图所示:

图标:
无需多言,是我们最常用的断点。
图标:
当指定的字段被读取或写入时暂停程序。这允许你对与特定实例变量的交互作出反应。例如,如果在一个复杂的过程结束时,你的某个字段出现了明显的错误值,设置一个字段观察点可能有助于确定故障的来源。该类型断点的图标。

鼠标右键点击该断点图标 ,弹出该断点配置,会有Field access和Field modification选项,此选项是字段类型断点特有的,分别对应访问该字段或修改该字段触发断点,两项同时选中,则访问与修改该字段都会触发断点。

图标:
在进入或退出指定的方法或其实现之一时暂停程序,允许你检查该方法的进入/退出条件。
当断点加在class类名这一行,且该类中没有编写构造函数(只有默认无参构造函数),当调用默认
无参构造函数时会触发此断点,程序挂起,故该断点虽然图标是行断点类型图标,但实际上属于方
法类型断点。

鼠标右键点击该断点图标 ,弹出该断点配置,会有Emulated、Method entry、Method
exit选项,此选项是方法类型断点特有的。Emulated勾选中,会将方法断点优化成方法中第一条和最后一条语句的行断点,这样会优化调试的性能,因此在IDE中会默认选中。
通过匹配符批量添加方法断点,在断点列表页:

匹配符示例:

图标:


图标:

断点有许多属性配置,如下图所示,下面将会对各个属性的作用以及使用进行说明。

表示是否启用该断点,选中表示启用,取消选中表示不启用。
可以输入一段能获得true或false的表达式,程序运行到断点处,且表达式条件为true才会触发断点。
下面三个属性选项经常配合 Suppend 属性一起使用,用于在不挂起的情况下,输出一些想要的日志信息。

是否在断点触发后移除该断点,后续不在触发。
指定在另一个断点触发后,该断点才启用,若该断点启用后,并且被触发。
场景:当只需要在某些条件下或某些操作后暂停程序时,这个选项很有用。在这种情况下,触发断
点通常不需要停止程序的执行,而是做成非暂停状态。
前边说的大都数属性,都只针对方法程序运行上下文。此属性更多关注通过过滤掉类、实例和调用者方法来微调断点操作,只在需要时暂停程序。,有如下几种过滤方式:

勾选中并输入一个正整数N,N>=1,那么程序会每N次命中断点才会触发挂起,如果同时设置了condition 与 pass count 属性,ide会优先判断 condition 表达式,再判断 pass count 是否满足,下例中, pass count 中传入的是15,每15次命中断点才会触发断点,挂起程序。

JVM参数添加 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar
对于每个类的实例,你可以计算它的保留大小。保留大小是指对象本身和它所引用的所有对象以及没有被其他对象引用的对象所占据的内存量。
这在估算重型单体或从磁盘上读取的数据(例如,复杂的JSON)的内存占用时,可能很有用。另外,在决定使用哪种数据结构时(例如,ArrayList与LinkedList),这也很有用。
在运行应用程序之前,确保在设置/首选项|构建、执行、部署|调试器中启用附加内存代理选项。
在查看类的实例时,右键单击一个实例并单击计算保留大小。
