【问题标题】:Eclipse debug stepping with AspectJEclipse 调试步进与 AspectJ
【发布时间】:2013-02-07 22:20:20
【问题描述】:

我安装了带有“AspectJ 开发工具”插件的 Eclipse。我正在尝试调试一些使用 AspectJ 的代码并单步执行它,但由于 AspectJ 在编译时添加了额外的东西,它无法匹配源代码行。似乎没有其他人抱怨似乎是一个重大缺陷(无法调试!),所以我希望我只需要调整一些东西以使其工作。我做错了什么?

【问题讨论】:

    标签: java eclipse eclipse-plugin aspectj


    【解决方案1】:

    到目前为止,我遇到了您仅通过 @Around 建议描述的行为。 @Before@After 建议从未混淆我使用的调试器。

    @Around 默认情况下内联在编织类中(包括目标类和方面本身)。这与我尝试过的其他建议不同。内联使调试器即使不是不可能也很难遵循流程。

    您可以在 AspectJ 编译器中禁用内联,这将以调试器友好的方式生成编织类。禁用内联可能会产生更慢的代码和更多的编织类(创建辅助类)。

    行家方式:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
            <execution>
                <goals>
                    <goal>compile</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <source>${java.compiler.source}</source>
            <target>${java.compiler.target}</target>
            <complianceLevel>${java.compiler.target}</complianceLevel>
    
            <!-- Avoid some optimizations that make debugger useless. -->
            <XnoInline>true</XnoInline>
        </configuration>
    </plugin>
    

    【讨论】:

      【解决方案2】:

      是的,这是 AspectJ 的一个错误。单步执行建议附加了不正确的文件属性。最好的解决方法是在您的建议中委托给适当的方法,并且行号将被对齐。

      【讨论】:

      • 代表什么,安德鲁?我不明白。
      • 通过委托,我的意思是让您的建议调用一个执行实际工作的方法。该建议除了这个调用之外什么都不做。
      • 我可能误解了你,但是将方面代码委托给我的方面类中的普通 Java 方法仍然让我的调试器感到困惑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多