NetBeans неправильно отлаживает после копирования источников - PullRequest
1 голос
/ 18 января 2010

Не знаю, почему это происходит ... Хорошо, вот ситуация: у меня на ноутбуке есть проект 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), когда я прыгаю в нестатический метод (то естьпереопределение) это выходит с этим ... Я пытался:

  • очистить и построить = без эффекта
  • вручную удалить сборку и 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 ]

2 голосов
/ 19 января 2010

Найдите в файле nbproject/project.properties свойство javac.debug и убедитесь, что оно "true". Если это так, grep для этого свойства в другом месте каталога nbproject и любых локальных настроек ant.

На полусвязанном примечании: когда я создаю проект в NetBeans, даже если источники уже существуют в другом месте, я всегда создаю новое "Java-приложение" и позволяю ему заполнять каталог проекта так, как он хочет. Затем я могу перейти к своим источникам и обновить проект, и NetBeans останется довольным.


Изменить после попытки установки javac.debug:

Снова глядя на ваш вопрос, я вижу, что вы смогли установить точку останова на test.java, но не смогли установить точку на baseControllerManager.java. Это указывает на то, что вы получаете последний класс из JAR-файла, а не из каталога вашего проекта.

Итак, первый шаг - убедиться, что вы не определили переменную окружения CLASSPATH. Это никогда - хорошая вещь, независимо от того, используете ли вы IDE или сборку вручную.

Следующим шагом будет просмотр библиотек, которые вы указали для проекта NetBeans. Вы можете использовать grep в JAR-файле; каталог файлов находится в незашифрованном виде. Этого должно быть достаточно, чтобы найти неквалифицированное имя класса.

И последнее - проверить, действительно ли вы компилируете класс, ища его в каталоге сборки.

1 голос
/ 19 января 2010

Недвижимость не присутствовала в 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

На самом деле он видит мое дополнение в последней строке.

Я очистил и перестроил проект. Отладчик снова не работает ... Я думаю, что я надраю задницу своему боссу, пока он не согласится использовать затмение или он уволит меня. Я буду безработным, но счастливым. Кроме шутки, @kdgrgory, у тебя есть еще идеи ???

1 голос
/ 18 января 2010

Обычно ошибка не компилируется означает, что символ не может быть разрешен.

Если у вас есть зависимости от других проектов, библиотек или jar-файлов, убедитесь, что они собраны успешно / присутствуют.

Проверка «Построить проекты по пути к классам» (в свойствах проекта> Построить> Компиляция) часто исправляет это. Если вы не отметили это, вы несете ответственность за обеспечение того, что зависимости уже построены.

0 голосов
/ 19 августа 2013

У меня возникла та же проблема, и я обнаружил, что если я запускаю команду clean из вкладки проекта, это решает проблему.

...