¿Por qué el programa depurado ralentizar tanto cuando se utiliza el método de depuración de entrada?

StackOverflow https://stackoverflow.com/questions/751105

  •  09-09-2019
  •  | 
  •  

Pregunta

Estoy usando interfaces de JDI para crear un depurador y cuando uso MethodEntryRequests para permitir el rastreo método de introducción del programa depurado se ralentiza en un factor de diez. He puesto el filtro de hilo principal y suspender la política de SUSPEND_EVENT_THREAD. Classfilter es limitado y si puedo imprimir cualquier eventos recibidos que no muestra más de dos docenas de los que por lo que no debe recibir demasiado de ellos. Estoy depurar localmente y habiendo followind tipo de línea de comandos con el programa java depurado:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337

¿Fue útil?

Solución

La respuesta corta es que la ejecución pasa por el intérprete cuando se establecen entradas de método. Creo que no hay de todos modos alrededor de esto ...

Esto solía ser el caso para todo el código que se ejecuta en modo de depuración, pero que se mejoró en 1,4 ... ahora HotSpot trabaja para la depuración 'a toda velocidad', excepto en el caso de las entradas y salidas de método, puntos de observación y cuando paso a paso o en los métodos que contienen los puntos de interrupción.

Otros consejos

2 razones:

  1. tiene que añadir los controles de cada entrada método (No hay opción de ajustar sólo algunos métodos)
  2. método de procesos en línea se hace imposible (Métodos tan pequeñas series 10-100x veces más lento)

mismo va a perfiladores y aplicaciones .NET

Yo asumiría que el depurador necesita despertar para cada llamada a un método para ver si coincide con la (s) que fueron seleccionados para romper. Debido a que tiene que revisar cada llamada a un método para un posible partido antes de que pueda ejecutar es considerablemente más lento que si no tiene que hacer todas estas comprobaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top