【问题标题】:Java debugging info not generated for Interfaces未为接口生成 Java 调试信息
【发布时间】:2011-12-11 08:45:39
【问题描述】:

我正在尝试使用“-g:vars”选项生成类文件。这对类来说很好,我得到了源中的参数名称。但这似乎不适用于接口。

例如界面 公共接口测试

{
    public abstract void doesntWork(String name, String last, int id);
}

=======生成==========

//  (version 1.6 : 50.0, no super bit)
public abstract interface Test {

  // Method descriptor #4 (Ljava/lang/String;Ljava/lang/String;I)V
  public abstract void doesntWork(java.lang.String arg0, java.lang.String arg1, int arg2);
}

当...

public class Test
{
    public void doesntWork(String name, String last, int id) {}
}

===========生成(仅显示相关部分)============

 public void doesntWork(java.lang.String name, java.lang.String last, int id);
    0  return
      Local variable table:
        [pc: 0, pc: 1] local: this index: 0 type: Test
        [pc: 0, pc: 1] local: name index: 1 type: java.lang.String
        [pc: 0, pc: 1] local: last index: 2 type: java.lang.String
        [pc: 0, pc: 1] local: id index: 3 type: int

我猜这是因为局部变量表不适用于接口。 如何获取接口的调试信息?

【问题讨论】:

    标签: debugging javac named-parameters


    【解决方案1】:

    那么,你要从界面哪里看到参数名称呢?每个实现类都会提供自己的名称——存储接口的名称有什么意义?

    【讨论】:

    • 同意,但是“-g”调试行为不应该在接口和类上保持一致。当然,名称可以在实现类中被覆盖。投票需要 15 个代表点。我可以知道投反对票的人吗?
    • 不应该:无法使用这些名称进行调试。因此,无需存储这些。这不是“可以被覆盖”——而是“必须并且将被覆盖”
    • 我是反对者 - 抱歉,我认为这很明显,这意味着我可能误读了您的来源。这似乎是一个毫无意义的“酸葡萄”答案——如果你不能拥有它,无论如何你一定不想要它。并且有很多工具软件应用程序需要名称 - 生成子类、记录测试、创建 UML 等。这不是答案 - 这是评论。
    • 如果 IDE 想在这个反编译的接口上显示信息怎么办,不应该允许吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2020-01-15
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多