java - sirve - ¿Por qué el programa depurado se desacelera tanto cuando se utiliza la depuración de entrada de método?
cuales son los componentes de awt (3)
2 razones:
- tiene que agregar comprobaciones en cada entrada de método (no hay opción para ajustar solo algunos métodos)
- el método en línea se vuelve imposible (por lo que los métodos pequeños se ejecutan entre 10 y 100 veces más lentamente)
Lo mismo ocurre con los programadores y las aplicaciones .net
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
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 se mejoró 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
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.