Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
 

Соединение и Детали Вызова                         

Содержание

Транспорты
Соединители
Sun Опции Вызова VM
Отладка Сменных Апплетов
Соединение с JDB
Интерфейсы Поставщика услуг

Транспорты

Транспорт JPDA является методом передачи между отладчиком и виртуальной машиной, которая отлаживается (после этого целевой VM). Передача является ориентированным соединением - действия стороны как сервер, прислушиваясь к соединению. Другая сторона действует как клиент и соединяется с сервером. JPDA позволяет или приложению отладчика или целевому VM действовать как сервер. Транспортные реализации могут позволить связь между процессами, работающими на единственной машине на различных машинах, или также. Устанавливая соединение транспорт адреса используется, чтобы идентифицировать конечную точку соединения. Формат транспортного адреса зависит от типа транспорта.

В пределах JPDA приложение отладчика использует Интерфейс Отладки Java (JDI) интерфейс и абстракция Соединителя, чтобы установить соединение с целевым VM. Соединитель, используемый приложением отладчика, инкапсулирует транспорт. На целевом VM агент, поддерживающий Протокол Провода Отладки JavaTM, используется, чтобы связаться с отладчиком. Этот агент (который может быть встроен в целевой VM или загружен из библиотеки времени выполнения) инкапсулирует транспорт, чтобы связаться с отладчиком.

Sun поставляет две транспортных реализации со ссылочной реализацией: транспорт сокета, основанный на TCP/IP, и транспорте разделяемой памяти. Спецификации не требуют, чтобы никакая определенная транспортная реализация существовала. В дополнение к транспортам, предоставленным реализацию, архитектура включает интерфейсы поставщика услуг, чтобы позволить дополнительным транспортам быть разработанной и развернутой.

Транспорт сокета

Ссылочная реализация JPDA обеспечивает транспорт сокета для Соляриса, Linux, и платформ Microsoft Windows. С транспортом сокета приложение отладчика и целевой VM могут находиться или на той же самой машине или на различных машинах. Транспорт сокета использует единый поток соединение TCP/IP между приложением отладчика и целевым VM. И IPv4 и IPv6 поддерживаются на стороне JDI транспорта сокета. Текущая реализация на целевой стороне VM только поддерживает IPv4, но это могло измениться в будущем выпуске так, чтобы и IPv4 и IPv6 поддерживались.

Команда и пакеты ответа пишутся потоку в соответствии со спецификацией JDWP, используя Транспортный Интерфейс JDWP. Так как много маленьких пакетов могут быть отправлены по JDWP, опция сокета TCP_NO_DELAY может улучшить производительность в некоторых реализациях сокета, избегая задержек, которые могли произойти, если реализация сокета буферизует маленькие пакеты прежде, чем отправить им. Сокеты закрываются корректно так, чтобы неотправленный данные был отправлен если возможный.

Транспорт сокета идентифицируется через уникальную строку, dt_socket. Это имя может использоваться, чтобы выбрать транспорт сокета, вызывая целевой VM. В пределах приложения отладчика используется соответствующий Соединитель, который инкапсулирует транспорт сокета.

В контекстах, где клиент присоединяет к серверу, у транспортных адресов сокета есть формат "<name>:<port>", где <name> является именем хоста, и <port> является номером порта сокета, в котором это присоединяет или слушает. В контекстах, где сервер ожидает клиента, чтобы присоединить, адрес состоит из одного только номера порта (имя хоста неявно).

Транспорт Разделяемой памяти

В дополнение к транспорту сокета ссылочная реализация JPDA обеспечивает транспорт разделяемой памяти на платформе Microsoft Windows. Транспорт разделяемой памяти использует область разделяемой памяти, чтобы обмениваться пакетами JDWP между приложением отладчика и целевым VM. С транспортом разделяемой памяти приложение отладчика и целевой VM должны находиться на той же самой машине.

Транспорт разделяемой памяти идентифицируется через уникальную строку, dt_shmem. Это имя может использоваться, чтобы выбрать транспорт сокета, вызывая целевой VM. В пределах приложения отладчика используется соответствующий Соединитель, который инкапсулирует транспорт разделяемой памяти.

Транспортные адреса разделяемой памяти являются просто именами, которые могут использоваться в качестве имен объектов отображения файла Microsoft Windows. Строка имени может состоять из любой комбинации символов, исключая наклонную черту влево.

Соединители

Соединитель является абстракцией JDI, которая используется в установлении соединения между приложением отладчика (записанный JDI) и целевым VM. Различные реализации JDI свободны обеспечить различные реализации соединителя, чтобы соответствовать транспорты и VMs, который они поддерживают. Интерфейсы соединителя являются очень общими, чтобы позволить JDI использоваться с переменными реализациями соединителя. Соединители конфигурируются через ряд пар имя/значение. Определенные соединители принимают другое имя / пары значения.

Хорошее клиентское приложение JDI позволит пользователям выбирать и конфигурировать любой соединитель, который может присутствовать, но это может быть выгодно, чтобы включить знание определенных соединителей в отладчик, чтобы сделать их конфигурацию более приятным пользовательским опытом. Пример реализация JDB, предоставленная JPDA, иллюстрирует этот подход.

Ссылочные реализации JDI обеспечивают несколько соединителей, которые отображаются на доступные транспортные типы и режимы соединения (запуск, слушание, и присоединение). Эти соединители описываются в следующих разделах. Список, содержащий эти соединители, возвращается методом JDI VirtualMachineManager.allConnectors (). Кроме того, каждое присоединение, слушание, и запуск соединителя содержатся в списках, возвращенных соответствующими методами VirtualMachineManager attachingConnectors (), listeningConnectors (), и launchingConnectors ().

Соединитель Запуска Командной строки Sun

Этот соединитель может использоваться приложением отладчика, чтобы запустить Sun VM или любой другой VM, который поддерживает те же самые опции вызова относительно отладки. Детали запуска VM и определения необходимых опций отладки обрабатываются соединителем. Базовый транспорт, используемый этим соединителем, зависит от платформы. На Microsoft Windows используется транспорт разделяемой памяти. На Солярисе и Linux используется транспорт сокета.

Этот соединитель однозначно определяется именем "com.sun.jdi. CommandLineLaunch".
 

Командная строка Sun, Запускающая Параметры Соединителя
имя необходимый? значение по умолчанию описание
home нет текущее значение свойства java.home Расположение Java 2 Среды выполнения, используемые, чтобы вызвать Целевой VM.
options нет "" Опции, в дополнение к стандартным опциям отладки, с которыми можно вызвать VM. 
main да "" Основной class отлаженного приложения и параметры командной строки.
suspend нет истина Истина, если целевой VM должен быть сразу приостановлен перед основным class, загружается; ложь иначе.
quote да "\"" Символ, используемый, чтобы объединить разграниченный пространством текст на командной строке. 
vmexec да "java" Исполнимая программа средства запуска VM. Это может быть изменено на javaw или на java_g для того, чтобы отладить, если то средство запуска доступно.

Необработанный Соединитель Запуска Командной строки

Этот соединитель может использоваться приложением отладчика, чтобы запустить любой VM. Вся командная строка должна быть определена, и она не редактируется всегда. Детали запуска VM с данной командной строкой обрабатываются соединителем. Базовый транспорт, используемый этим соединителем, зависит от платформы. На Microsoft Windows используется транспорт разделяемой памяти. На операционной среде Соляриса используется транспорт сокета.

Этот соединитель однозначно определяется именем "com.sun.jdi. RawCommandLineLaunch".
 

Необработанная Командная строка, Запускающая Параметры Соединителя
имя необходимый? значение по умолчанию описание
command да "" Полная командная строка, чтобы вызвать целевой VM с приложением, которое будет отлажено..
address да "" Транспортный адрес, в котором можно прислушаться к недавно запущенному целевому VM, чтобы соединиться. Это значение обычно является частью необработанного параметра команды также, но это не требуется, если у целевого VM есть некоторые другие средства определения транспортного адреса, с которым это должно соединиться.
quote да "\"" Символ, используемый, чтобы объединить разграниченный пространством текст на командной строке. 

Соединитель Присоединения сокета

Этот соединитель может использоваться приложением отладчика, чтобы присоединить к в настоящий момент рабочему целевому VM через транспорт сокета.. Целевой VM, должно быть, был вызван с опциями, непротиворечивыми с параметрами этого соединителя, описанными в таблице ниже. Для Sun VMs необходимые опции описываются ниже.

Этот соединитель однозначно определяется именем "com.sun.jdi. SocketAttach".
 

Сокет, Присоединяющий Параметры Соединителя
имя необходимый? значение по умолчанию описание
hostname нет локальное имя хоста Имя хост-машины, чтобы соединиться с.
port да "" Номер порта на машине host, чтобы соединиться с.
timeout нет "" Тайм-аут, в миллисекундах, чтобы использовать, присоединяя к целевому VM.

Соединитель Присоединения Разделяемой памяти

Этот соединитель может использоваться приложением отладчика, чтобы присоединить к в настоящий момент рабочему целевому VM через транспорт разделяемой памяти. Это доступно только на платформе Microsoft Windows. Целевой VM, должно быть, был вызван с опциями, непротиворечивыми с этим параметры соединителей, описанные в таблице ниже. Для Sun VMs необходимые опции описываются ниже.

Этот соединитель однозначно определяется именем "com.sun.jdi. SharedMemoryAttach".
 

Разделяемая память, Присоединяющая Параметры Соединителя
имя необходимый? значение по умолчанию описание
name да "" Транспортный адрес разделяемой памяти, в котором слушает целевой VM..
timeout нет "" Тайм-аут, в миллисекундах, чтобы использовать, присоединяя к целевому VM

Сокет Слушая Соединитель

Этот соединитель может использоваться приложением отладчика, чтобы принять соединение от отдельно вызванного целевого VM до транспорта сокета.. Целевой VM должен быть вызван с опциями, непротиворечивыми с параметрами этого соединителя, описанными в таблице ниже. Для Sun VMs необходимые опции описываются ниже.

Этот соединитель может принять соединения от многократного целевого VMs.

Этот соединитель однозначно определяется именем "com.sun.jdi. SocketListen".
 

Сокет Слушая Параметры Соединителя
имя необходимый? значение по умолчанию описание
port нет Эфемерный номер порта (порт, присвоенный стеком TCP/IP) Номер порта, в котором можно прислушаться к соединению..
localAddress нет Все адреса, присвоенные узлу IP-адрес, присвоенный узлу
timeout нет "" Тайм-аут, в миллисекундах, чтобы использовать, ожидая целевого VM, чтобы соединиться

Разделяемая память Слушая Соединитель

Этот соединитель может использоваться приложением отладчика, чтобы принять соединение от отдельно вызванного целевого VM до транспорта разделяемой памяти. Это доступно только на платформе Microsoft Windows. Целевой VM должен быть вызван с опциями, непротиворечивыми с параметрами этого соединителя, описанными в таблице ниже. Для Sun VMs необходимые опции описываются ниже.

Этот соединитель может принять соединения от многократного целевого VMs.

Этот соединитель однозначно определяется именем "com.sun.jdi. SharedMemoryListen".
 

Разделяемая память Слушая Параметры Соединителя
имя необходимый? значение по умолчанию описание
name да "" Транспортный адрес разделяемой памяти, в котором можно прислушаться к целевому соединению VM.
timeout нет "" Тайм-аут, в миллисекундах, чтобы использовать, ожидая целевого VM, чтобы соединиться

Соединитель Присоединения процесса

Этот соединитель может использоваться приложением отладчика, чтобы присоединить к в настоящий момент рабочему целевому VM, который был запущен с подопции отладки "server=y", описанной ниже. Целевой VM должен быть Java SE 6 или более новый.

У Соединителя Присоединения Процесса нет связанного транспорта. Вместо этого транспорт определяется динамически, когда присоединение фактически происходит. Из-за этого, транспорт ().name () метод для этого соединителя "локальные" возвраты.

Этот соединитель однозначно определяется именем "com.sun.jdi. ProcessAttach".

Процесс, Присоединяющий Параметры Соединителя
  имя необходимый? значение по умолчанию описание
pid да "" ID Процесса процесса, который будет отлажен. 
timeout нет "" Тайм-аут, в миллисекундах, чтобы использовать, присоединяя к целевому VM. 

Ядро SA Присоединение Соединителя

Этот соединитель может использоваться приложением отладчика, чтобы отладить базовый файл.  Возможно, что базовый файл повреждается до такой степени, что не все доступные операции отладки могут быть выполнены на этом.

Объект VirtualMachine, возвращенный этим соединителем, присоединяет (), метод 'только для чтения'.  Это означает что метод:
         vm.canBeModified ()
возвратит false, и что клиент JDI не должен вызвать методы JDI, которые определяются, чтобы бросить VMCannotBeModifiedException в этом случае.  Размер слова (то есть бит на 32 бита/64) и версия (например, 5.0, 5.1) Виртуальной машины отладчика должен быть тем же самым как той из Виртуальной машины процесса, из которого был произведен базовый файл.
Этот соединитель позволяет многократные сеансы отладки на том же самом базовом файле.

Этот соединитель однозначно определяется именем "sun.jvm.hotspot.jdi.SACoreAttachingConnector".

Ядро SA Присоединение Параметров Соединителя
имя необходимый? значение по умолчанию описание
ядро
нет ядро Путь базового файла, чтобы отладить
javaExecutable
да
""
Путь исполнимой программы Java, которая произвела базовый файл.  

Соединитель Присоединения PID SA

Этот соединитель может использоваться приложением отладчика, чтобы отладить процесс. Это не доступно на Linux платформа Itanium. Возможно, что процесс повреждается до такой степени, что не все доступные операции отладки могут быть выполнены на этом.

Объект VirtualMachine, возвращенный этим соединителем, присоединяет (), метод 'только для чтения'.  Это означает что метод:
         vm.canBeModified ()
возвратит false, и что клиент JDI не должен вызвать методы JDI, которые определяются, чтобы бросить VMCannotBeModifiedException в этом случае.

Процесс, который будет отлажен, не должен быть запущен в режиме отладки (то есть с-agentlib:jdwp или-Xrunjdwp).  Это - permissable для процесса, который будет подвешен.  Размер слова (то есть бит на 32 бита/64) и версия (например, 5.0, 5.1) отладчика и отлаживаемой программы должен быть тем же самым. Процесс приостанавливается, когда этот соединитель присоединяет и возобновленный, когда этот соединитель отсоединяется. Больше чем один SAPIDAttachingConnector не может присоединить к единственному процессу одновременно.

Этот соединитель однозначно определяется именем "sun.jvm.hotspot.jdi.SAPIDAttachingConnector".

PID SA, Присоединяющий Параметры Соединителя
  имя необходимый? значение по умолчанию описание
pid да "" ID Процесса процесса, который будет отлажен. 

Соединитель Присоединения Сервера Отладки SA

Этот соединитель может использоваться приложением отладчика, чтобы отладить процесс или базовый файл на машине кроме машины, на которую работает отладчик. Это не доступно на Linux платформа Itanium. Возможно, что удаленный файл процесса/ядра повреждается до такой степени, что не все доступные операции отладки могут быть выполнены на этом.

Объект VirtualMachine, возвращенный этим соединителем, присоединяет (), метод 'только для чтения'.  Это означает что метод:
         vm.canBeModified ()
возвратит false, и что клиент JDI не должен вызвать методы JDI, которые определяются, чтобы бросить VMCannotBeModifiedException в этом случае.

Этот соединитель использует RMI, чтобы связаться с 'работой' сервера отладки удаленной машины.
Перед присоединением () вызывают метод на этом соединителе, сервер отладки должен быть запущен на удаленной машине
и сказал, какой процесс или corefile должны быть отлажены.  Следующее должно быть сделано на удаленной машине: 
        
${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".

SA DebugServer, Присоединяющий Параметры Соединителя
имя необходимый? значение по умолчанию описание
debugServerName да "" IP-адрес или имя машины, на которую работает сервер отладки. Если машина содержит многократные серверы отладки, это имя должно иметь форму
  uniqueID@IPAddress
или
  uniqueID@hostname
где 'uniqueID' является строкой, используемой, чтобы запустить соответствующий сервер отладки.


Sun Опции Вызова VM

Этот раздел описывает опции, необходимые, чтобы вызвать Sun VMs для того, чтобы отладить.

Реализации 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 определяется следующим образом:

-agentlib:jdwp=<sub-options>
Загружает ссылочную реализацию JPDA JDWP. Эта библиотека находится в целевом VM и использует TI JVM и JNI, чтобы взаимодействовать с этим. Это использует транспорт и протокол JDWP, чтобы связаться с отдельным приложением отладчика. Определенные подопции описываются ниже.

Для выпусков до 5.0 используются опции -Xdebug И -Xrunjdwp:

-Xdebug
Позволяет отладить
-Xrunjdwp:<sub-options>
Загружает ссылочную реализацию JPDA JDWP. Эта библиотека находится в целевом VM и использует JVMDI и JNI, чтобы взаимодействовать с этим. Это использует транспорт и протокол JDWP, чтобы связаться с отдельным приложением отладчика. Определенные подопции описываются ниже.

-agentlib:jdwp и-Xrunjdwp подопции

-agentlib:jdwp и-Xrunjdwp опция могут быть далее квалифицированы с подопциями. Подопции определяются следующим образом:

   -agentlib:jdwp=<name1>[=<value1>],<name2>[=<value2>]...

или

   -Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...

Таблица ниже описывает опции, которые могут использоваться:
 

Подопции-Xrunjdwp
имя необходимый? значение по умолчанию описание
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. Получающаяся строка выполняется.

  • Значение подопции transport.
  • Значение подопции address (или сгенерированный адрес, если Вам не дают),
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.

Примеры

-agentlib:jdwp=transport=dt_socket,server=y,address=8000
Прислушайтесь к сокетному соединению на порту 8000. Приостановите этот VM перед основными загрузками class (suspend=y по умолчанию). Как только приложение отладчика соединяется, оно может отправить команду JDWP, чтобы возобновить VM.

-agentlib:jdwp=transport=dt_socket,server=y,address=localhost:8000,timeout=5000
Прислушайтесь к сокетному соединению на порту 8000 на петлевом адресе только. Оконечный, если отладчик не присоединяет в течение 5 секунд. Приостановите этот VM перед основными загрузками class (suspend=y по умолчанию). Как только приложение отладчика соединяется, оно может отправить команду JDWP, чтобы возобновить VM.

-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n
Выберите доступный транспортный адрес разделяемой памяти и напечатайте его к stdout. Прислушайтесь к сопряжению с общей памятью в том адресе. Позвольте VM начинать выполняться прежде, чем приложение отладчика присоединит.

-agentlib:jdwp=transport=dt_socket,address=myhost:8000
Присоедините к рабочему приложению отладчика через сокет на узле myhost в порту 8000. Приостановите этот VM перед основными загрузками class.

-agentlib:jdwp=transport=dt_shmem,address=mysharedmemory
Присоедините к рабочему приложению отладчика через разделяемую память в транспортном адресе "mysharedmemory". Приостановите этот VM перед основными загрузками class.

-agentlib:jdwp=transport=dt_socket,server=y,address=8000,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
Ожидайте экземпляра java.io. IOException, который будет брошен в этот VM. Приостановите VM (suspend=y по умолчанию). Прислушайтесь к сокетному соединению на порту 8000. Выполните следующее: "/usr/local/bin/debugstub dt_socket myhost:8000"., Эта программа может запустить процесс отладчика в отдельном окне, которое присоединит к этому VM и начнет отлаживать его.

-agentlib:jdwp=transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe
Ожидайте непойманного исключения, которое будет брошено в этот VM. Приостановите VM. Выберите транспорт разделяемой памяти, адресуются и прислушиваются к соединению в том адресе. Выполните следующее: "d:\bin\debugstub.exe dt_shmem <address>", где <address> является выбранным адресом разделяемой памяти. Эта программа может запустить процесс отладчика в отдельном окне, которое присоединит к этому VM и начнет отлаживать его.

Отладка Сменных Апплетов

Начинаясь с версии 1.2.2 Плагина Java, апплеты, работающие под Плагином, могут быть отлажены. Необходимые опции VM, описанные выше, могут быть определены в Сменной панели управления, под вкладкой "Basic", в "Параметрах Среды выполнения Java". Опции отладки под вкладкой "Advanced" не должны использоваться, поскольку они включат старой поддержке отладки sun.tools.debug. В будущих версиях Плагина эти опции отладки будут изменены, чтобы использовать JPDA.

JDI запускающиеся соединители не может использоваться, чтобы отладить Сменные апплеты.

Соединение с JDB

Реализация в качестве примера JDB, предоставленного JPDA, приводит пример использования соединителей JDI. Есть опции "ярлыка" к JDB, которые принимают использование соединителей, известных этому (то есть, соединители, существующие в ссылочной реализации). Это также обеспечивает способ установить общее соединение, используя любой соединитель. В то время как JDB является едва примером хорошего интерфейса отладчика, он действительно обеспечивает простой пример соединителей в использовании.

В 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 - Интерфейсы Поставщика услуг.


Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами