2008-11-26 13 views
12

He estado probando the performance and memory profiler AQTime para ver si vale la pena gastar esos grandes $$$ para mi aplicación Delphi.¿Cómo lo hace AQTime?

Lo que me sorprende es cómo puede proporcionarle seguimiento de rendimiento de nivel de línea (que incluye el número de veces que se ejecutó cada línea y la cantidad de tiempo) sin modificar el código fuente de la aplicación y sin agregar una cantidad excesiva de tiempo para la ejecución de depuración.

La forma en que lo hacen tan eficientemente me hace pensar que podría haber algunas técnicas/tecnologías utilizadas aquí que no conozco y que sería útil conocer.

¿Sabe qué tipo de métodos utilizan para capturar la ejecución línea por línea sin cambios de código?

¿Existen otras herramientas de creación de perfiles que también realizan una comprobación no invasiva línea por línea y, de ser así, utilizan las mismas técnicas?

+0

AQTime es FABULOSO. Lo amo. TOTALMENTE lo recomiendo –

Respuesta

7

Esto es solo una especulación, pero tal vez AQtime se basa en una tecnología que es similar a Microsoft Detours?

desvíos es una biblioteca para instrumentar funciones de Win32 arbitrarios en x86, x64, y máquinas IA64. Desvíos intercepta funciones de Win32 volviendo a escribir el código en memoria para las funciones de destino.

+0

Debe ser! Salvo que alguien sepa algo diferente, te estoy dando la respuesta. – lkessler

+4

Algunas personas lo llaman "enganchar". MadCodeHook es una herramienta para Delphi que te permitirá usar el código. Curiosamente, una de las limitaciones del enganche de código es que no puede enganchar funciones que son demasiado cortas para permitir una modificación en línea. AQTime informa funciones demasiado pequeñas para permitir enganches, y todo lo que puede hacer es ignorarlas.Esto me hace pensar que con seguridad, el enganche (instrumentación, interceptación) es lo que hace AQ Time. –

2

No conozco Delphi en particular, pero un depurador de aplicaciones C puede hacer un perfil línea por línea con relativa facilidad: puede cargar el código y asociar cada ruta de código con un bloque de código. Entonces puede romper todas las instrucciones de salto condicional y solo mirar y ver qué camino del código se toma. Los depuradores como gdb pueden funcionar de forma relativamente eficiente porque funcionan a través del núcleo y no modifican el código, solo se informan cuando se ejecuta cada línea. Si algo hace que el bloque salga temprano (longjmp), el depurador puede conectarlo y averiguar qué tan lejos llegó a los bloques cuando sucedió e incrementar solo esas líneas.

Por supuesto, todavía sería difícil codificar, pero cuando digo fácilmente me refiero a que podría hacerlo sin perder el tiempo en cada una de las instrucciones para actualizar un contador.

2

El ya desaparecido TurboPower también tenía una gran herramienta de análisis y perfil para Delphi llamada Sleuth QA Suite. Lo encontré mucho más simple que AQ Time, pero también es mucho más fácil obtener resultados significativos. Podría valer la pena intentar localizarlo: ¿eBay, tal vez?

+0

Probablemente podría funcionar hasta aproximadamente Delphi 5. –

9

que he hecho un perfilador de código abierto para Delphi que hace lo mismo: http://code.google.com/p/asmprofiler/

No es perfecto, pero es gratis :-). También usa la técnica Detour. Almacena cada llamada (debe establecer manualmente las funciones que desea perfil), para que pueda crear un árbol de historial de llamadas exacto, incluido un gráfico de tiempo (!).

+2

Gracias y buen trabajo, Andre. Voy a probarlo. La comunidad Delphi realmente podría usar un generador de perfiles integrado directamente en el IDE de Delphi. Ya que lo tiene de código abierto, es posible que desee considerar donarlo a Embarcadero y pueden incluirlo. O comercialícelo por $ 200 cada una. – lkessler

+0

¡Ahora sí tiene uno! RAD Studio XE Enterprise y ARchitect incluyen ahora AQTime Lite. Está integrado. Y si compra AQ Time Pro, se integra totalmente en IDE o puede usarlo de manera independiente. –

Cuestiones relacionadas