NetBeans复制源代码后无法正确调试

3

不知道为什么会出现这种情况...好的,这是情况:我在我的笔记本电脑上有一个nb项目。我在桌面上也有同样的项目。我将源代码(而不是整个项目)复制到桌面上,覆盖桌面上的源代码。一切都清理和构建正常。然后我启动调试器。在主类上,我可以逐步调试。如果它进入一个内部方法,下面就是发生的事情:

Listening on 37574
User program running
LineBreakpoint test.java : 45 successfully submitted.
Breakpoint hit at line 45 in class test by thread main.
Thread main stopped at test.java:45.
User program running
Not able to submit breakpoint LineBreakpoint baseControllerManager.java : 41, reason: No executable location available at line 41 in class baseClasses.JNW.baseControllerManager.
Invalid LineBreakpoint baseControllerManager.java : 41
Debugger stopped on uncompilable source code.
User program finished

正如您所看到的,当我在静态方法main中时它可以工作(第45行),但当我跳转到非静态方法(即重写方法)时,它就出现了这个问题... 我尝试过:

  • 清理和构建 = 没有效果
  • 手动删除构建和分发 = 没有效果

您有什么建议吗?

为了完整起见,我附上了主类的源代码:

import baseClasses.JNW.baseAction;
import baseClasses.JNW.baseContResult;
import baseClasses.JNW.baseController;
import baseClasses.JNW.baseControllerManager;

public class test {

    public static class starter extends baseController {

        public static final String ACTION_START = "ACTION_START";

        @Override
        public baseContResult doAction(baseAction action) {

            if (ACTION_START.equals(action.action)) {
                manager.log("action start...");
                return new baseContResult(RESULT_OK, baseContResult.resultType.RESULT_OK);
            }
            return super.doAction(action);
        }

        @Override
        public void init() {
            super.init();
        }
    }

    public void startMe() {
        baseControllerManager manager;
        try {
            manager = new baseControllerManager();
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
        starter st = new starter();
        manager.setMainController(st);
        manager.doAction(new baseAction(starter.ACTION_START));
    }

    public static void main(String args[]) {


        test te = new test();
        te.startMe();

    }
}

你尝试检查一下你的NetBeans安装了吗?试试先关闭再重启?或者重新安装一次? - phunehehe
4个回答

2
请查看文件nbproject/project.properties中的属性javac.debug,确保它是“true”。如果是这样,请在nbproject目录和任何本地ant设置中搜索该属性。
半相关提示:当我在NetBeans中创建项目时,即使源代码已经存在于其他地方,我也总是创建一个新的“Java应用程序”,并让它按照自己的意愿填充项目目录。然后我可以移动我的源代码并更新项目,NetBeans就会很高兴。
编辑后,您尝试设置javac.debug
再次查看您的问题,我发现您能够test.java上设置断点,但无法在baseControllerManager.java上设置断点。这表明您正在从某个JAR文件中获取后者类,而不是从您的项目目录中获取。
因此,第一步是确保您没有定义CLASSPATH环境变量。无论您使用IDE还是手动构建,这都永远不是好事情。
下一步是查看您为NetBeans项目指定的库。您可以在JAR文件上使用grep;文件目录以明文形式呈现。仅查找未限定的类名应该就足够了。
最后一件事是验证您是否确实编译了该类,方法是查找它是否在构建目录中。

1
该属性在project.properties中不存在。因此我在一个有许多javac.*属性的地方添加了它。然后我像这样进行了grep:
dario@dario-desktop:~/Scrivania/JNW$ grep -r javac.debug *
nbproject/project.properties:javac.debug=true
nbproject/build-impl.xml:        <property name="javac.debug" value="true"/>
nbproject/build-impl.xml:            <attribute default="${javac.debug}" name="debug"/>
nbproject/build-impl.xml:                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
nbproject/private/private.properties:javac.debug=true
nbproject/project.properties~:javac.debug=true

实际上它看到了我在最后一行的添加。

我清理并重新构建了项目。调试器又不工作了........... 我想我会踢我的老板的屁股,直到他同意使用eclipse或者解雇我。我会失业但是很开心。开玩笑的,@kdgrgory,你还有什么更好的想法吗???


1
将来而言,编辑您的问题可能是缩小问题范围的最佳方法...无论如何,我都必须向上滚动,因此将在那里附上下一个评论。 - kdgregory

1
通常,无法编译的错误意味着一个符号无法被解析。
如果您有依赖于其他项目、库或jar包,请确保它们已经成功构建/存在。
在项目属性 > 构建 > 编译中勾选“在类路径上构建项目”通常可以解决此问题。如果您没有勾选此项,则需要自行确保依赖项已经构建完成。

构建项目时,Classpath已经被选中(即使它位于不同的位置 - 构建>库)。但我认为这不是问题,因为这是一个单一(且简单)的项目。即使我修改了一些内容,一切都编译得很好。并且运行正常。唯一的问题是调试器。我开始这个项目时,一切都很好(在Eclipse中)。然后我在NB中创建了一个项目(问我的老板为什么),它开始给我带来这样的问题(我使用“从现有源代码创建项目”选项创建了一个项目)。我重新做了这个项目十几次,甚至在重新安装NetBeans之后也是如此,但无济于事。 - gotch4
好的,听起来调试器看到了关于类文件的冲突信息。您的源目录下是否有任何类文件?NB的方法是将所有类文件放在build/classes中。然而,我发现当我使用“从现有源创建项目”的选项时,它会将源目录添加到类路径中。因此,可能存在来自早期版本的类文件,NB不知道如何删除。类文件中的第41行与可执行代码不对应。 - Devon_C_Miller

0

我曾经遇到过同样的问题,后来发现如果我从项目选项卡中运行清理操作,就可以解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接