2011-04-18 8 views
5

Me gustaría conectar mi código de objeto compilado al código de C++, y luego verificar si se ejecutó una cierta línea de código. ¿Cómo hacer esas dos cosas?¿Cómo escribir un depurador simple?

Si la explicación no es simple (apuesto a que no), ¿alguien puede al menos señalar algunas páginas web que explican cómo hacer esto?

entiendo que la solución es diferente para diferentes plataformas, pero estoy interesado en cómo se hace en Windows y Linux (Linux para el inicio)

+4

¿Por qué no utilizar depuradores existentes? – Erik

+0

@Erik Sé que los depuradores son muy complejos, y no estoy interesado en crear uno. Me gustaría recopilar información sobre cómo verificar qué métodos/funciones se ejecutan durante la ejecución y cuántas veces. –

+0

¿Qué "código de objeto compilado" es esto? Dependiendo de su nivel de control, podría ser tan fácil como agregar una declaración printf() antes/después de la línea de código que desea conocer. Alternativamente, es posible que desee ver cómo anular las funciones en su plataforma de elección (a veces denominado swizzling). En muchas plataformas, puede reemplazar la entrada de una función en una tabla enlazadora con su propia función, hacer su printf, luego hacer que la llamada sea original. En el peor de los casos, también podría reemplazar la primera instrucción de la máquina de una función con una instrucción de salto. – uliwitness

Respuesta

0

En su comentario se dice "Me gustaría simplemente para recopilar información sobre cómo comprobar qué métodos/funciones se ejecutan durante la ejecución, y cuántas veces".

Si eso es lo que quiere lograr, utilice un generador de perfiles como gprof.

Compila tu programa con -g -pg y cuando tu programa termine creará un archivo que puede ser procesado por gprof para mostrarte lo que quieres.

+0

Correcto, pero quiero hacerlo desde mi aplicación, sin necesidad de compilar la biblioteca o un programa con opciones adicionales (-pg para gcc). –

2

Sospecho que realmente no necesita un depurador sino un generador de perfiles. Me gusta el callgrind en http://valgrind.org/docs/manual/cl-manual.html, que tiene un bonito entorno gráfico en http://kcachegrind.sourceforge.net/.

Para intentar que haría uso de

$ valgrind --tool=callgrind ./myapp 
$ kcachegrind callgrind.out.xxx 
+0

Eso no es realmente lo que estaba buscando, pero valgrind es de código abierto. Entonces, gracias por el consejo :) –

Cuestiones relacionadas