2011-10-23 12 views
7

Para Delphi 2010, ¿hay una manera de conseguir un diagrama, a partir de la función X (o incluso todo el programa), de lo que otras funciones/procedimientos se llaman ...¿Hay alguna manera de obtener un diagrama de lo que llama a qué?

Algo a lo largo de las líneas de:

Function X 
    - Function A 
    - Procedure B 
    - Procedure C 
    - Function D 

(Por supuesto gráfica sería mejor ...)

+1

Relacionado pero diferente; Las características Delphi Enterprise/Architect UML contienen soporte para Diagramas de Secuencia. No es exactamente lo que estás pidiendo, sospecho, pero relacionado. ejemplo de diagrama de secuencia de otra herramienta está aquí: http://www.ibm.com/developerworks/rational/library/3101.html –

+0

Al mirar esto 2 años después, me gustaría que el OP hubiera indicado si está buscando estática o árbol dinámico de llamadas. – Mawg

Respuesta

9

Peganza Pascal Analyzer ofrece ambos call tree y reverse call tree informes. Hay varios otros analizadores de códigos estáticos disponibles, pero este es el que estoy familiarizado.

Por lo que sé, no hay nada de esta naturaleza incorporado a Delphi.

+2

AQTime (que ahora se incluye con Delphi, creo) le mostrará el árbol de llamadas de un código en particular. –

+0

@david es un análisis dinámico ¿no? –

+0

AQTime realiza análisis estáticos y dinámicos, y Peganza PAL solo hace análisis estáticos. AQTime tiene más de una pantalla gráfica, mientras que la salida de Peganza es texto, que se puede generar como texto plano o xml, y luego construirse un gráfico. PAL no puede encontrar una gran cantidad de cadenas de llamadas del mundo real que ocurren dinámicamente, como devoluciones de eventos de eventos, o incluso casos donde las clases derivadas anulan los métodos virtuales, que luego llaman a otras cosas que no son llamadas por el método de la clase base, etc. Para eso, se requeriría un análisis dinámico. –

3

Aquí hay un ejemplo de un gráfico de llamadas AQTime. Las secuencias de llamadas de AQTime se pueden recopilar dinámicamente (recopiladas de un programa en ejecución), lo que significa que debe activar la ruta del código que desea representar (asegúrese de que algún menú o botón en el que pueda hacer clic en la UI llame a este código) y luego puede o pueden reunirse estáticamente. El dinámico puede parecer más trabajo, y puede pensar que el análisis estático es mejor, y de alguna manera el análisis estático es mejor, pero los gráficos dinámicos de secuencia de llamadas son en realidad "lo que realmente sucedió en una ejecución en particular" mientras que el análisis estático proporciona "qué el analizador podría ser siempre cierto, independientemente de si esta ruta de código es ejecutada por usted o por su cliente ". De hecho, recomiendo usar ambas rutas y compararlas para ver lo que aprendes.

enter image description here

AQTime pro es bastante caro, pero estoy al tanto de ninguna alternativas libres. (No, no trabajo para SmartBear o Embarcadero). Soy un desarrollador profesional y considero que estas herramientas valen la pena. Tu llamada.

que suelen utilizar la función de secuencia de llamada mientras se ejecuta del perfilador de rendimiento, por lo que consigo algunos valores de tiempo (el digram muestra Time: #.## msec debido a que la información se obtuvo mediante el generador de perfiles de rendimiento, de forma dinámica, en lugar de por la estática analizador de análisis, que no sabe cuánto tarda en ejecutarse una función).

Cuestiones relacionadas