2010-12-03 14 views
6

Los perfiladores AFAIK solo pueden decir cuánto tiempo se gasta en cada función. Pero dado que los compiladores de C++ tienden a incorporar el código agresivamente y también algunas funciones no son tan cortas, a menudo es útil conocer más detalles: cuánto tiempo consume cada construcción.¿Cómo configuro el código más allá del nivel por función?

¿Cómo se puede lograr esto, excepto el código de reestructuración en funciones más pequeñas?

Respuesta

5

Si utiliza un generador de perfiles de muestreo (por ejemplo Zoom o Shark), en lugar de un perfilador instrumentado (por ejemplo gprof) entonces se puede obtener mucho más finos perfiles de grano, hasta el nivel de los estados y la instrucción.

+1

++ Pruebe Zoom, o cualquier generador de perfiles que obtenga muestras de ** pila **, al azar ** reloj de pared ** veces, en el ** intervalo que le interesa **, y le dirá ** por línea de código ** el ** por ciento de las muestras en las que aparece **. [Aquí hay una lista de razones de por qué.] (Http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343) Es increíble cuántos profilers no lo "obtienen". –

+0

@sharptooth: Lo que hace que los muestreadores de columnas de porcentajes de línea sean tan efectivos es que automatizan lo que es (IMHO) un método manual aún más efectivo (http://stackoverflow.com/questions/375913/what-can -i-use-to-profile-c-code-in-linux/378024 # 378024) - pausa aleatoria. –

2

Si puede usar callgrind, entonces puede obtener un resumen de los métodos que están tomando la mayor parte del tiempo de procesamiento. Luego puede usar kcachegrind para ver los resultados. Le da un gráfico muy agradable, a través del cual puede navegar fácilmente y encontrar cuellos de botella.

Cuestiones relacionadas