Domanda

Ho passato gli ultimi 4 ore a cercare di impostare la memoria Eclipse TPTP profilatura su un'istanza Tomcat che deve essere eseguito in modalità remota (cioè non in Eclisse). Questo dovrebbe essere possibile a seconda della TPTP e l'agente docs controller.

ho installato i componenti TPTP (4.6.0) nel mio Eclipse (Galileo) banco di lavoro, insieme con l'Agent Controller in base alla istruzioni sul sito. Per abilitare l'agente, ho aggiunto il seguenti opzioni per la riga di comando che avvia l'istanza di Tomcat:

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true

e ha aggiunto le seguenti directory per la parte anteriore del PATH:

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler
D:\dev\tools\ac\bin

Quando si tenta di avviare Tomcat ho sempre ottenuto il seguente errore messaggio:

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279]

ho fatto un sacco di Googling ma ho trovato niente di rilevante; Provai reinstallare TPTP e varie versioni di Agent Controller.

Alla fine il problema si è rivelato che stavo iniziando Tomcat con l'opzione "jpda", che si traduce in catalina.bat

-Xdebug -Xrunjdwp:transport=.....

Rimozione del "jpda" argomento del comando causato JVMTI per iniziare a lavorare.

Quindi, la domanda è: non ho trovato nulla durante una qualsiasi delle mie ricerche a indicano che un agente JVMTI è incompatibile con il debug. Può qualcuno spiegare che cosa sta succedendo e perché JVMTI + JDWP non è una valida messa a punto?

È stato utile?

Soluzione

Nessuna delle risposte finora sono corrette e questo è il primo colpo che arriva su Google se si esegue una query l'errore menzionato, quindi mi sento è necessario qualche chiarimento.

JVMTI e JDWP non lavorare insieme, in realtà in genere devono essere utilizzati insieme. Otterrete ERROR: JDWP unable to get necessary JVMTI capabilities se -Xrunjdwp (e / o eventualmente -agentlib:jdwp) è stato specificato più di una volta nella riga di comando. Per risolvere il problema, assicuratevi di avere una sola delle -Xrunjdwp o -agentlib:jdwp nella riga di comando.

Per ulteriori dettagli, continua a leggere ...

JVMTI (Java Virtual Machine Tool Interface) è il successore di JVMDI (Java Virtual Machine Debug Interface) e JVMPI (Java Virtual Machine Profiling Interface). Incorpora le funzionalità sia JVMDI e JVMPI, entrambi i quali sono stati sconsigliata a Java 5 e rimosso in Java 6. È API che espone i meccanismi interni della JVM ai fini di debugging e profiling.

JDWP (Java Debug Wire Protocol) è un protocollo che descrive un semplice meccanismo per la trasmissione di comandi e risposte. Per quanto ne so, è l'unico modo per un debugger seduto fuori la JVM di comunicare con esso e per interfacciarsi con il JVMTI.

JDI (Java Debugger Interface) è un'API lato client (debug-laterale) che espone alcune delle caratteristiche di JVMTI pur utilizzando JDWP più o meno trasparente.

Il bug menzionato nel Bob Dobbs di risposta riguarda il messaggio di errore fuorviante, e il fatto che la JVM cercherà di caricare JDWP una volta per ogni volta che viene specificato nella riga di comando. Esso non dice da nessuna parte che JDWP e JVMTI non possono essere utilizzate insieme.

Più informazioni su: https://www.ibm.com /support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm

Altri suggerimenti

Ho incontrato lo stesso problema come voi, ma mi si avvicinò con un rapporto JVM bug ( http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345 ) che gettano un po 'di luce sulla questione. Si tratta fondamentalmente alla libreria dell'agente Java non essere mai destinato ad essere caricato due volte anche nella stessa VM. Fa schifo, ma sembra come se fosse la limitazione di base del sistema agente che non è possibile fare entrambe le cose allo stesso tempo.

Per me è stato lo stesso problema come codice Bling inviati, erano -Xrunjdwp duplicato non si rese conto c'erano un secondo -Xrunjdwp come è stato nascosto nel %JAVA_OPTIONS% variabili, controllare lo script di avvio del server di applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top