Как указать путь к классам для соединителя запуска JDI; используя Эклипс?

По сути, я делаю то же самое, что и оригинальный плакат этот вопрос. В моем случае я пытаюсь запустить примеры программ Sun/Oracle JPDA в Eclipse Kepler на OS X 10.8.5 с Oracle jdk1.7.0_72. Однако в документации к этим примерам предполагается, что они будут запускаться из командной строки.

Я хочу использовать com.sun.jdi.connect.LaunchingConnector для запуска отлаживаемой программы. Требуются аргументы класса Map ‹String, Argument>. Одна из записей карты имеет ключ «main», а связанный с ним объект содержит строку, которая является именем основного класса отлаживаемой программы. В моем случае это "debuggee.DebuggerTest". Программа, которая вызывает запуск, имеет основной класс "debugger.TraceLaunch".

Мой проект Eclipse имеет структуру по умолчанию, поэтому есть папка с именем «классы» с подпапкой для каждого пакета. В моем случае это «com», «debugger» и «debuggee». Пакет "com" включает все классы из "Пример Приложения JDI".

Я использую "VMLauncher", упомянутый в посте, указанном выше, для запуска. Запуск не удается; он сообщает, что мой основной класс "debuggee.DebuggerTest" не может быть найден. Это также терпит неудачу, если я пытаюсь включить полный путь как часть имени моего основного класса.

Если я открою терминал и экспортирую переменную CLASSPATH, указывающую папку «classes» внутри моего проекта Eclipse (и библиотеки JDI), я смогу запустить отлаживаемую программу с помощью команды «java debuggee.DebuggerTest», и она будет работать правильно. Я также могу запустить отладчик с помощью команды "java debugger.TraceLaunch", и он, в свою очередь, успешно запустит отлаживаемую программу. Это говорит о том, что VMLauncher делает все правильно.

Таким образом, проблема заключается в том, что где-то глубоко в пакетах примеров или пакетах JDI из Oracle "tools.jar" LaunchingConnector вызывает средство запуска командной строки. Кажется, это класс SunCommandLineLauncher. Эта пусковая установка, кажется, предполагает путь к классам. Аргументы средства запуска, похоже, не задокументированы, поэтому я не знаю, есть ли возможность указать путь к классам. Исходный код JDI-классов Oracle jdk1.7.0 (в "lib/tools.jar"), по-видимому, не был опубликован, поэтому я не могу посмотреть в коде подробности того, как средство запуска использует свои аргументы.

Еще одна подсказка, которая может быть полезной: в примерах приложений JDI пример отладчика графического интерфейса позволяет указать путь к классам, который он пытается проанализировать. К сожалению, он не распознает кавычки или экранирование символов, как это делает оболочка UNIX, и не понимает имена папок, содержащие пробел.

В идеале я хотел бы знать, как указать путь к классам для LaunchingConnector.

Моим вторым выбором были бы некоторые более общие предложения о том, как указать путь к классам при адаптации программы командной строки для работы в Eclipse.


person user1198411    schedule 26.11.2014    source источник


Ответы (1)


Новая виртуальная машина, созданная трассировкой, имеет другой путь к классу. Если вы хотите запустить программу в eclipse, вам нужно добавить следующий код в вашу программу трассировки.

Connector.Argument options =(Connector.Argument)arguments.get("options");
options.setValue("-cp \"F:\\Workspace\\TraceProgram\\bin\"");

Где -cp устанавливает путь класса к вновь созданной виртуальной машине, вам нужно перейти в рабочий каталог eclipse.

Это работает для меня.

person Nizar    schedule 30.11.2014