【问题标题】:Why does Java Debugger steps into internal methods randomly?为什么 Java Debugger 会随机进入内部方法?
【发布时间】:2021-08-11 11:11:33
【问题描述】:

自从我开始注意到调试我正在开发的应用程序时,Java 调试器会随机进入一些 Spring Framework 内部方法已经有一段时间了。

例如,当我在调用另一个服务方法的 RestController 端点方法中添加断点时,调试器会进入 BeanFactoryTransactionAttributeSourceAdvisor.getPointcut() 方法。

这种行为让我感到不安,因为避免这种情况的唯一方法是在服务方法中添加断点。

有人知道为什么会这样吗?

如果有帮助,我正在使用 Intellij IDEA 2020.3、Java 8 和 Spring Boot 2.X。

【问题讨论】:

    标签: java debugging intellij-idea


    【解决方案1】:

    Spring 中的某些类通过方面进行了增强以提供正交功能(在本例中:事务,这可能意味着您使用 @Transactional 注释您的方法或类)。

    在运行时(或编译时),围绕您自己的代码编织附加代码以提供该功能(在运行您的代码之前启动事务、成功完成时提交或回滚(某些)异常)。

    换句话说,当您的代码运行时,除了您自己的代码之外,还有更多代码,当您单步调试调试器时,IntelliJ 也会单步调试该代码并将其显示给您。

    【讨论】:

    • 感谢马克的洞察力,你知道是否有可能以某种方式避免这种行为吗?
    • @Marcos 您的意思是避免这些方法存在,还是避免它们出现在调试器中?第一个,不,第二个,也许 IntelliJ 有一些功能,我不确定。另见How to force IntelliJ to only step into my source code?
    • 哇,我知道我之前已经搜索过类似的内容,但我不记得要再次找到它的确切术语,谢谢!我认为该问题的第二个答案正是我正在寻找的。谢谢马克!
    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 2012-11-09
    • 2013-09-26
    • 2020-10-20
    • 2020-11-26
    • 2019-08-18
    • 2019-02-09
    • 2012-06-19
    相关资源
    最近更新 更多