Затмение отладки сам IDE

Я хотел бы изучить, как отладить, затмевают IDE. Назад ко времени, когда я использовал VS для разработки.NET, я могу присоединить VS к процессу в любое время и начать прослеживать вниз проблему. Я надеюсь, что было бы что-то похожее с затмением, но как новичок к миру Java, я не знаю об этом.

Мое затмение недавно часто зависает, когда я выполняю его вместе с iBUS (на Ubuntu 9.10). Я надеюсь, что могу узнать то, что действительно подвешивает мое затмение и избегает, чтобы (Воображают, Ваше затмение зависло, и каждый из Ваших открытых файлов были закрыты. Это просто сводит меня с ума).

7
задан n611x007 9 September 2015 в 13:22
поделиться

4 ответа

Он еще не готов, но встраиваемая версия CouchDB включена в долгосрочный план выпуска.

Репликация предназначена для включения автономных приложений с CouchDB. Если у вас возникли особые потребности, вы можете реплицировать данные из couchdb в локальную структуру данных, хранить их локально, обновлять и возвращать данные через репликацию, но для этого потребуется определенный код.

-121--2617159-

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

  • Классическое ОО использует конструкторы для определения публичного договора "инициализации" для потребителей класса (скрывая ВСЕ детали реализации; aka инкапсуляция). Этот контракт может обеспечить наличие готового к использованию объекта после создания экземпляра (т.е. отсутствие дополнительных шагов инициализации, которые будут запомнены пользователем).

  • (конструктор) DI, несомненно, разрывает инкапсуляцию, выводя детали реализации через этот открытый интерфейс конструктора. До тех пор, пока мы все еще считаем публичный конструктор ответственным за определение контракта инициализации для пользователей, мы создали ужасное нарушение инкапсуляции.

Теоретический пример:

Класс Foo имеет 4 методы и нуждается в целом числе для инициализации, поэтому его конструктор выглядит как Foo (размер int) и пользователям класса Foo сразу ясно, что они должны предоставить размер при создании экземпляра для работы Foo.

Скажем, что эта конкретная реализация Foo может также потребовать IWidget для выполнения своей работы. Ввод конструктора этой зависимости приведет к созданию конструктора, такого как Foo(размер int, виджет IWidget)

Что меня интересует, так это то, что теперь у нас есть конструктор, который смешивает данные инициализации с зависимостями - один ввод представляет интерес для пользователя класса ( size ), другая является внутренней зависимостью, которая служит только для запутывания пользователя и является детализацией реализации ( виджет ).

Параметр size НЕ является зависимостью - это простое значение инициализации экземпляра. IoC является dandy для внешних зависимостей (как виджет), но не для внутренней инициализации состояния.

Что еще хуже, если виджет необходим только для 2 из 4 методов в этом классе; Возможно, я несу накладные расходы на создание экземпляра для виджета, даже если он не может быть использован!

Как это скомпрометировать/согласовать?

Один из подходов заключается в переключении исключительно на интерфейсы для определения операционного контракта; и отменить использование конструкторов пользователями. Чтобы быть согласованными, доступ ко всем объектам должен осуществляться только через интерфейсы, а создание экземпляров должно осуществляться только с помощью какого-либо средства разрешения (например, контейнера IOC/DI). Только контейнер получает экземпляр вещей.

Что касается зависимости виджета, но как инициализировать "размер", не прибегая к отдельному методу инициализации на интерфейсе Foo? Используя это решение,мы потеряли возможность гарантировать, что экземпляр Foo будет полностью инициализирован к моменту получения экземпляра. Буммер, потому что мне очень нравится идея и простота конструкторной инъекции.

Как обеспечить гарантированную инициализацию в этом мире DI, когда инициализация БОЛЬШЕ, ЧЕМ ТОЛЬКО внешние зависимости?

-121--2036448-

Отредактируйте файл eclipse.ini и добавьте в нижнюю часть (под -vmargs) следующее:

-Xdebug
-Xnoagent
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

Затем в другой Eclipse той же версии, вы можете импортировать подключаемые модули, которые вы заинтересованы в отладке. Файл - > Импорт... - > Разработка подключаемого модуля - > Подключаемые модули и фрагменты. Импорт с активной платформы и Импорт как «Проекты с исходными папками» на следующей вкладке выберите нужные подключаемые модули.

Установите соответствующие точки останова.

Затем создайте в отладочных конфигурациях новое «удаленное приложение». localhost, порт 8000. Добавьте проекты Java на исходную вкладку и выполните отладку.

11
ответ дан 6 December 2019 в 12:50
поделиться

Одна вещь, которую вы можете сделать с любым Java-приложением, чтобы посмотреть, что происходит в данный момент, это послать ему kill -QUIT. Это заставит JVM вывести в stdout трассировку стека для всех своих потоков. Сделайте это три раза с промежутком в секунду, и вы сможете увидеть, какие потоки движутся не очень хорошо.

Еще одна вещь, которую можно попробовать, это присоединить JConsole к запущенному процессу.

2
ответ дан 6 December 2019 в 12:50
поделиться

Вернувшись к тому времени, когда я использовал VS для разработки .NET, я могу в любое время подключить VS к процессу и начать отслеживать проблему.

Удаленная отладка также возможна в Java с помощью Java Platform Debugger Architecture (JPDA), вам просто нужно запустить приложение, которое вы хотите отлаживать, с включенной удаленной отладкой. Вот статья , показывающая, как это сделать и как настроить Eclipse для отладки приложения удаления.

Обратите внимание, что начиная с Java 5 вам следует предпочесть параметр -agentlib: jdwp параметрам -Xdebug и -Xrunjdwp , как описано в ] Параметры вызова Sun VM .

Обновление: Eclipse - это приложение Java, поэтому должна быть возможность добавить параметры, упомянутые в статье в eclipse.ini . Однако никогда не пробовал (я упустил тот факт, что вы хотите отлаживать сам Eclipse).

1
ответ дан 6 December 2019 в 12:50
поделиться

Существует в основном два способа отладки Java-приложения (например, в Eclipse). Вы можете использовать JConsole, но он не даст вам много деталей. Для подключения JConsole вы должны включить удаленную отладку; для этого нужен аргумент JVM, который вы можете записать в файл eclipse.ini прямо рядом с исполняемым файлом Eclipse.

Другой вариант - запустить runtime workbench из Eclipse: он используется для тестирования собственных плагинов, но поскольку плагины Eclipse - это то же самое, можно запустить сессию отладки с приложением Eclipse. Для этого вам нужно иметь хотя бы один плагин в рабочей области (например, создать новый проект плагина hello world), а затем вы можете отлаживать его как приложение Eclipse.

0
ответ дан 6 December 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: