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


Estoy usando interfaces jdi para crear un depurador y cuando uso MethodEntryRequests para habilitar el rastreo de entrada de método, el programa depurado se desacelera por factor de decenas. He configurado el filtro para el hilo principal y la política de suspensión SUSPEND_EVENT_THREAD. Classfilter es limitado y si imprimo cualquier evento recibido, no muestra más de un par de docenas de ellos, por lo que no debería recibir demasiados. Estoy depurando localmente y tengo un tipo de línea de comando followind con el programa java depurado:

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


32
2018-04-15 10:43


origen


Respuestas:


La respuesta corta es que la ejecución se ejecuta a través del intérprete cuando se establecen las entradas del método. No creo que haya algo de esto alrededor de esto ...

Este solía ser el caso para todos los códigos que se ejecutan en modo de depuración, pero fue mejorado en 1.4... ahora HotSpot funciona para la depuración a "velocidad completa", excepto en el caso de entradas y salidas de métodos, puntos de observación y pasos únicos o en métodos que contienen puntos de interrupción.


31
2018-04-24 22:08



2 razones:

  1. tiene que agregar controles en cada entrada de método (no hay opción para ajustar solo algunos métodos)
  2. método en línea se hace imposible (Así que los métodos pequeños se ejecutan 10-100 veces más lento)

Lo mismo ocurre con los programadores y las aplicaciones .net


11
2018-04-26 12:36



Supongo que el depurador debe activarse para cada llamada de método para ver si coincide con la (s) que se seleccionaron para romperse. Debido a que tiene que verificar cada método de llamada para una coincidencia potencial antes de que pueda ejecutarse, es considerablemente más lento que si no tiene que hacer todas estas comprobaciones.


5
2018-04-21 03:26