复制源后,NetBeans未正确调试

时间:2010-01-18 13:54:48

标签: java debugging netbeans netbeans6.8

Dunno为什么会发生这种情况......好的就是这种情况:我的笔记本电脑上有一个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行),因为我跳进一个非静态方法(这是一个覆盖)它出来了...我试图:

  • 清理并构建=无效
  • 手动删除build和dist =无效

你有什么建议?

为了完整起见,我附上了主要类的来源:

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();

    }
}

4 个答案:

答案 0 :(得分:2)

在文件nbproject/project.properties中查找属性javac.debug,并确保它为“true”。如果是,则在nbproject目录中的其他地方使用grep以及任何本地ant设置。

在半相关的说明中:当我在NetBeans中创建项目时,即使源已经存在于其他地方,我总是创建一个新的“Java应用程序”,并让它根据需要填充项目目录。然后我可以移动我的源代码并更新项目,NetBeans保持高兴。


尝试设置javac.debug后编辑:

再次查看您的问题,我发现您 能够在test.java上设置断点,但无法在baseControllerManager.java上设置断点。这向我表明,你是从某个地方的某个JAR获得后一个类,而不是从你的项目目录。

因此,第一步是确保您尚未定义CLASSPATH环境变量。无论您使用的是IDE还是手动构建,这都不是永远的好事。

下一步是查看您为NetBeans项目指定的库。您可以在JAR文件上使用grep;文件目录是纯文本。找到不合格的类名就足够了。

最后一件事是通过在构建目录中查找它来验证您确实正在编译该类。

答案 1 :(得分:1)

通常,无法编译的错误意味着无法解析符号。

如果您对其他项目,库或jar有依赖关系,请确保它们已成功构建/存在。

选中“在类路径上构建项目”(在项目属性>构建>编译中)通常会解决此问题。如果您没有选中此选项,则负责确保已构建依赖项。

答案 2 :(得分:1)

project.properties中不存在该属性。所以我添加了它(在那里有许多javac。*属性...)。然后我像这样说:

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,你还有什么想法???

答案 3 :(得分:0)

我遇到了同样的问题,发现如果我从项目标签中运行干净,它就可以解决问题。