Spec-Zone .ru
спецификации, руководства, описания, API
|
В пределах JPDA приложение отладчика использует Интерфейс Отладки Java (JDI) интерфейс и абстракция Соединителя, чтобы установить соединение с целевым VM. Соединитель, используемый приложением отладчика, инкапсулирует транспорт. На целевом VM агент, поддерживающий Протокол Провода Отладки JavaTM, используется, чтобы связаться с отладчиком. Этот агент (который может быть встроен в целевой VM или загружен из библиотеки времени выполнения) инкапсулирует транспорт, чтобы связаться с отладчиком.
Sun поставляет две транспортных реализации со ссылочной реализацией: транспорт сокета, основанный на TCP/IP, и транспорте разделяемой памяти. Спецификации не требуют, чтобы никакая определенная транспортная реализация существовала. В дополнение к транспортам, предоставленным реализацию, архитектура включает интерфейсы поставщика услуг, чтобы позволить дополнительным транспортам быть разработанной и развернутой.
Команда и пакеты ответа пишутся потоку в соответствии со спецификацией JDWP, используя Транспортный Интерфейс JDWP. Так как много маленьких пакетов могут быть отправлены по JDWP, опция сокета TCP_NO_DELAY может улучшить производительность в некоторых реализациях сокета, избегая задержек, которые могли произойти, если реализация сокета буферизует маленькие пакеты прежде, чем отправить им. Сокеты закрываются корректно так, чтобы неотправленный данные был отправлен если возможный.
Транспорт сокета идентифицируется через уникальную строку, dt_socket. Это имя может использоваться, чтобы выбрать транспорт сокета, вызывая целевой VM. В пределах приложения отладчика используется соответствующий Соединитель, который инкапсулирует транспорт сокета.
В контекстах, где клиент присоединяет к серверу, у транспортных адресов сокета есть формат "<name>:<port>", где <name> является именем хоста, и <port> является номером порта сокета, в котором это присоединяет или слушает. В контекстах, где сервер ожидает клиента, чтобы присоединить, адрес состоит из одного только номера порта (имя хоста неявно).
Транспорт разделяемой памяти идентифицируется через уникальную строку, dt_shmem. Это имя может использоваться, чтобы выбрать транспорт сокета, вызывая целевой VM. В пределах приложения отладчика используется соответствующий Соединитель, который инкапсулирует транспорт разделяемой памяти.
Транспортные адреса разделяемой памяти являются просто именами, которые могут использоваться в качестве имен объектов отображения файла Microsoft Windows. Строка имени может состоять из любой комбинации символов, исключая наклонную черту влево.
Хорошее клиентское приложение JDI позволит пользователям выбирать и конфигурировать любой соединитель, который может присутствовать, но это может быть выгодно, чтобы включить знание определенных соединителей в отладчик, чтобы сделать их конфигурацию более приятным пользовательским опытом. Пример реализация JDB, предоставленная JPDA, иллюстрирует этот подход.
Ссылочные реализации JDI обеспечивают несколько соединителей, которые отображаются на доступные транспортные типы и режимы соединения (запуск, слушание, и присоединение). Эти соединители описываются в следующих разделах. Список, содержащий эти соединители, возвращается методом JDI VirtualMachineManager.allConnectors (). Кроме того, каждое присоединение, слушание, и запуск соединителя содержатся в списках, возвращенных соответствующими методами VirtualMachineManager attachingConnectors (), listeningConnectors (), и launchingConnectors ().
Этот соединитель однозначно определяется именем "com.sun.jdi. CommandLineLaunch".
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
home | нет | текущее значение свойства java.home | Расположение Java 2 Среды выполнения, используемые, чтобы вызвать Целевой VM. |
options | нет | "" | Опции, в дополнение к стандартным опциям отладки, с которыми можно вызвать VM. |
main | да | "" | Основной class отлаженного приложения и параметры командной строки. |
suspend | нет | истина | Истина, если целевой VM должен быть сразу приостановлен перед основным class, загружается; ложь иначе. |
quote | да | "\"" | Символ, используемый, чтобы объединить разграниченный пространством текст на командной строке. |
vmexec | да | "java" | Исполнимая программа средства запуска VM. Это может быть изменено на javaw или на java_g для того, чтобы отладить, если то средство запуска доступно. |
Этот соединитель однозначно определяется именем "com.sun.jdi. RawCommandLineLaunch".
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
command | да | "" | Полная командная строка, чтобы вызвать целевой VM с приложением, которое будет отлажено.. |
address | да | "" | Транспортный адрес, в котором можно прислушаться к недавно запущенному целевому VM, чтобы соединиться. Это значение обычно является частью необработанного параметра команды также, но это не требуется, если у целевого VM есть некоторые другие средства определения транспортного адреса, с которым это должно соединиться. |
quote | да | "\"" | Символ, используемый, чтобы объединить разграниченный пространством текст на командной строке. |
Этот соединитель однозначно определяется именем "com.sun.jdi. SocketAttach".
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
hostname | нет | локальное имя хоста | Имя хост-машины, чтобы соединиться с. |
port | да | "" | Номер порта на машине host, чтобы соединиться с. |
timeout | нет | "" | Тайм-аут, в миллисекундах, чтобы использовать, присоединяя к целевому VM. |
Этот соединитель однозначно определяется именем "com.sun.jdi. SharedMemoryAttach".
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
name | да | "" | Транспортный адрес разделяемой памяти, в котором слушает целевой VM.. |
timeout | нет | "" | Тайм-аут, в миллисекундах, чтобы использовать, присоединяя к целевому VM |
Этот соединитель может принять соединения от многократного целевого VMs.
Этот соединитель однозначно определяется именем "com.sun.jdi. SocketListen".
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
port | нет | Эфемерный номер порта (порт, присвоенный стеком TCP/IP) | Номер порта, в котором можно прислушаться к соединению.. |
localAddress | нет | Все адреса, присвоенные узлу | IP-адрес, присвоенный узлу |
timeout | нет | "" | Тайм-аут, в миллисекундах, чтобы использовать, ожидая целевого VM, чтобы соединиться |
Этот соединитель может принять соединения от многократного целевого VMs.
Этот соединитель однозначно определяется именем "com.sun.jdi. SharedMemoryListen".
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
name | да | "" | Транспортный адрес разделяемой памяти, в котором можно прислушаться к целевому соединению VM. |
timeout | нет | "" | Тайм-аут, в миллисекундах, чтобы использовать, ожидая целевого VM, чтобы соединиться |
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
pid | да | "" | ID Процесса процесса, который будет отлажен. |
timeout | нет | "" | Тайм-аут, в миллисекундах, чтобы использовать, присоединяя к целевому VM. |
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
ядро |
нет | ядро | Путь базового файла, чтобы отладить |
javaExecutable |
да |
"" |
Путь исполнимой программы Java, которая произвела базовый файл. |
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
pid | да | "" | ID Процесса процесса, который будет отлажен. |
${JAVA_HOME}/bin/rmiregistry -J-Xbootclasspath/p:${JAVA_HOME}/lib/sa-jdi.jar
${JAVA_HOME}/bin/java \ -classpath ${JAVA_HOME}/lib/sa-jdi.jar \ sun.jvm.hotspot.jdi.SADebugServer \ <pid> \ [uniqueID]
или
${JAVA_HOME}/bin/java \ -classpath ${JAVA_HOME}/lib/sa-jdi.jar \ sun.jvm.hotspot.jdi.SADebugServer \ <pathname to the java executable that produced the core file>\ <pathname of the corefile to debug> \ [uniqueID]
Альтернатива вышеупомянутым двум шагам должна использовать jsadebugd команду, чтобы запустить реестр RMI и сервер отладки на удаленной машине.
'uniqueID' является дополнительной строкой. Если больше чем один сервер отладки должен работать одновременно на той же самой машине, то у каждого должна быть различная строка 'uniqueID'.
В вышеупомянутом JAVA_HOME должен содержать путь установки Java, которая является тем же самым диаметром долота (то есть бит на 32 бита/64) и та же самая версия (например, 5.0, 5.1) как версия, используемая отлаживаемой программой. Однако отладчик не должен быть тем же самым диаметром долота и версией.
Процесс, который будет отлажен, не должен быть запущен в режиме отладки (то есть с-agentlib:jdwp или-Xrunjdwp). Это - permissable для процесса, который будет подвешен. Процесс приостанавливается, когда сервер отладки присоединяет к нему. Когда сервер отладки, присоединенный к процессу, будет уничтожен (^C или другими средствами), процесс отлаживаемой программы будет возобновлен. Присоединение больше чем одного сервера отладки к corefile разрешается, но только один сервер отладки может быть присоединен к процессу.
Этот соединитель позволяет многократные сеансы отладки, соединенные с тем же самым сервером отладки.
Этот соединитель однозначно определяется именем "sun.jvm.hotspot.jdi.SADebugServerAttachingConnector".
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
debugServerName | да | "" | IP-адрес или имя машины, на которую работает сервер отладки. Если машина содержит многократные серверы отладки, это имя должно иметь форму uniqueID@IPAddress или uniqueID@hostname где 'uniqueID' является строкой, используемой, чтобы запустить соответствующий сервер отладки. |
Реализации Sun VM требуют, чтобы параметры командной строки загрузили агент JDWP для того, чтобы отладить. От 5.0 вперед опция -agentlib:jdwp используется, чтобы загрузить и определить опции к агенту JDWP. Для выпусков до 5.0, опции -Xdebug И -Xrunjdwp используются (5.0 реализаций также поддерживают опции -Xdebug И -Xrunjdwp, но более новая опция -agentlib:jdwp предпочтительна как агент JDWP в 5.0 использовании интерфейс TI JVM к VM, а не более старый интерфейс JVMDI).
Если Ваше приложение отладчика будет использовать Соединитель Запуска Командной строки Sun JDI, то соединитель будет использовать опции -Xdebug И -Xrunjdwp, как Соединитель может использоваться, чтобы соединиться с пред5.0 целевыми VM.
Если целевой VM 5.0 или более нов, опция -agentlib:jdwp определяется следующим образом:
Для выпусков до 5.0 используются опции -Xdebug И -Xrunjdwp:
-agentlib:jdwp=<name1>[=<value1>],<name2>[=<value2>]...
или
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
Таблица ниже описывает опции, которые могут использоваться:
имя | необходимый? | значение по умолчанию | описание |
---|---|---|---|
help | нет | N/A | Печатает краткое сообщение справки и выходит из VM. |
transport | да | ни один | Имя транспорта, чтобы использовать в соединении с приложением отладчика. |
server | нет | "n" | Если "y", прислушайтесь к приложению отладчика, чтобы присоединить; иначе, присоедините к приложению отладчика в указанном address.
Если "y" и никакой адрес определяются, выберите транспортный адрес, в котором можно прислушаться к приложению отладчика, и напечатать адрес к потоку стандартного вывода. |
address | да, если server=n нет, иначе |
"" | Транспортный адрес для соединения. Если server=n, попытка присоединить к приложению отладчика в этом адресе. Если server=y, прислушайтесь к соединению в этом адресе. |
timeout | нет | "" | Если server=y определяет тайм-аут, в миллисекундах, чтобы ожидать отладчика, чтобы присоединить. Если server=n определяет тайм-аут, в миллисекундах, чтобы использовать, присоединяя к отладчику. Отметьте, что опция тайм-аута может быть проигнорирована некоторыми транспортными реализациями. |
launch | нет | ни один | При завершении инициализации JDWP запустите процесс, данный в этой строке. Эта опция используется в комбинации с onthrow и/или onuncaught, чтобы обеспечить "Своевременную отладку", в которой запускается процесс отладчика, когда определенное событие имеет место в этом VM. Отметьте, что запущенный процесс не запускается в его собственном окне. В большинстве случаев запущенный процесс должен быть маленьким приложением, которое по очереди запускает приложение отладчика в его собственном окне. Следующие строки добавляются к строке, данной в этом (разграниченном пространством) параметре. Они могут помочь запущенному отладчику в установлении соединения с этим VM. Получающаяся строка выполняется.
|
onthrow | нет | ни один | Инициализация задержки библиотеки JDWP до исключения данного class бросается в этот VM. Исключение имя class должно быть квалифицировано к пакету. Установление соединения включается в инициализацию JDWP, таким образом, это не будет начинаться, пока исключение не выдается. |
onuncaught | нет | "n" | Если "y", инициализация задержки библиотеки JDWP, пока непойманное исключение не выдается в этом VM. Установление соединения включается в инициализацию JDWP, таким образом, это не будет начинаться, пока исключение не выдается. См. спецификацию JDI для com.sun.jdi. ExceptionEvent для определения непойманных исключений. |
suspend | нет | "y" | Если "y", у VMStartEvent есть suspendPolicy SUSPEND_ALL. Если "n", у VMStartEvent есть suspendPolicy SUSPEND_NONE. |
JDI запускающиеся соединители не может использоваться, чтобы отладить Сменные апплеты.
В JDB, - присоединяют опцию, обеспечивает доступ к одному из соединителей присоединения в ссылочной реализации (разделяемая память на Microsoft Windows, сокеты на Солярисе и платформах Linux). - слушают, опция обеспечивает доступ к одному из соединителей слушания в ссылочной реализации (разделяемая память на Microsoft Windows, сокеты на Солярисе и платформах Linux). Имя class и параметры, определенные непосредственно на командной строке, обеспечивают доступ к соединителю запуска командной строки Sun.
Например:
jdb -attach myhost:8000
легкий способ присоединить к целевому VM с Соединителем Присоединения Сокета (на операционной среде Соляриса), и
jdb Hello 1 2 3
легкий способ запустить целевой VM с Соединителем Запуска Командной строки Sun.
Однако, - соединяются, возможность также предоставляется JDB, чтобы обработать любой соединитель, беря имя соединителя и ряд произвольных пар параметра имени/значения. Например у командных строк выше есть следующие эквиваленты.
jdb -connect com.sun.jdi.SocketAttach:hostname=myhost,port=8000
jdb -connect "com.sun.jdi.CommandLineLaunch:main=Hello 1 2 3"
Эти командные строки являются более громоздкими, чем те выше, но - соединяются, опция может использоваться с любым соединителем. Этот вид работы является примитивным примером того, как отладчик JDI может иметь дело с любым видом соединителя, обеспечивая упрощенный интерфейс для того, чтобы он имел дело с общими, известными соединителями.
JPDA включает интерфейсы поставщика услуг, чтобы позволить разработку и развертывание соединителя и транспортные реализации. Эти интерфейсы поставщика услуг позволяют отладчик, и другие поставщики инструмента разрабатывают новые реализации соединителя и обеспечивают дополнительные транспортные механизмы и вне сокета и транспорта разделяемой памяти, обеспеченного Sun. Интерфейсы поставщика услуг в JDI определяются в com.sun.jdi.connect.spi пакете.
В дополнение к интерфейсам поставщика услуг в JDI реализация Sun также включает транспортный интерфейс библиотеки, названный Java Транспортный Интерфейс Протокола Провода TMDebug. Транспортная библиотека загружается агентом JDWP в целевом VM и пользуется, чтобы установить соединение с отладчиком и транспортировать пакеты JDWP между отладчиком и VM.
Дополнительная информация об интерфейсах поставщика услуг может быть в документе Архитектурой Отладчика Платформы JavaTM - Интерфейсы Поставщика услуг.