【问题标题】:How to force IntelliJ to only step into my source code?如何强制 IntelliJ 只进入我的源代码?
【发布时间】:2014-01-01 17:30:54
【问题描述】:

我有一个 Spring MVC 项目,我正在尝试使用 IntelliJ 进行调试。

如果我在控制器代码中设置断点,调试会在适当的位置停止。该特定行在另一个 bean 中有更多我自己的代码。我希望能够进入代码。如果我在断点绑定后立即“进入”,它会进入 Spring 的 AOP 框架代码。

如果我立即触发相同的断点并“智能单步执行”,它会将我置于源文件的第 -1 行(如上图所示)。这条线 -1 表示什么?如果我再次执行“智能步入”,我将在原始断点之后的行结束,但从未被放置在我想步入的方法中。

我尝试将 Spring AOP 包放入调试器设置中不要进入类。但是,我最终还不得不放入事务类以及其他几个类。最后,我把所有的 Spring 都放到了列表中……还有 SLF4J 和一些 JDBC 驱动。

我怎样才能让 IntelliJ 只在我的项目源代码中停止,除非我使用“强制步入”之类的东西?

【问题讨论】:

  • Do not step into classes 设置中,您可以使用通配符声明模式。这可能有助于快速排除像org.*com.* 这样的包,假设你的不是从这些包开始的。如果您能够在这些模式中使用否定 (!),这将是一个完美的解决方案 - 我建议将此作为功能请求发送。
  • 有相关feature request for IntelliJ IDEA,请投票。 - IDEA-54807允许项目设置有自己的Debug Stepping,并添加[Only Step into the classes]以提高生产力

标签: debugging intellij-idea


【解决方案1】:

目前没有仅针对用户代码(如Visual Studio's 'Just My Code')的整体选项。

具有相同行为的最佳方法是排除不会“进入”的特定代码类或包(可以通过通配符为类包设置过滤模式)。

这可以在 Settings/PreferencesDebugger/Stepping 选项中实现。

【讨论】:

    【解决方案2】:

    Spring 的AOP 可能是最严重的违规者之一。

    OP 建议他们已经这样做了,但是您可以通过以下方式禁用进入指定类(IntelliJ ULTIMATE 2018.2):

    File -> Settings... -> Build, Execution, Deployment -> Debugger -> Stepping

    ...Do not step into the classes -> Add Pattern -> Enter the filter pattern:

    ... ... org.springframework.aop.*

    请注意,您可以使用通配符来禁用整个命名空间 - 例如,假设您组织的命名空间以 com 开头,您可以通过将 org.* 列入黑名单来获得大部分路径.

    【讨论】:

    • 完美答案!
    • 真实答案!
    • 绝妙的答案!
    【解决方案3】:

    IntelliJ ULTIMATE 2018.3 使用 File -> Settings -> 搜索“步骤”如下:

    【讨论】:

      【解决方案4】:

      《Ultimate 2019.1》中的另一种方式(以前的版本可能也是):

      当您现在正在调试时,您可以在“调试器”-“框架”视图中右键单击一个类。然后您可以选择“添加步进过滤器...”并为该类添加一个新的步进过滤器。当然你也可以在这里更改新的步骤过滤器,使用占位符“*”等等...

      【讨论】:

      • 我在社区版本中看到了这个选项,但不明白它有什么变化——我点击的类仍然显示在框架列表中。
      【解决方案5】:

      完成上述更改后,停止您的应用程序并重新启动到调试模式才能生效。

      【讨论】:

        猜你喜欢
        • 2017-01-11
        • 2010-12-24
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多