2012-02-23 24 views
8

Tengo un código grande de código C muy antiguo en un sistema integrado y desafortunadamente no hay casos/suites de prueba automatizadas. Esto hace que la reestructuración y el código de refactorización sean una tarea peligrosa.Llamada a funciones C y seguimiento de parámetros: caso de prueba y generación simulada

La escritura manual de casos de prueba consume mucho tiempo, por lo que pensé que debería ser posible automatizar al menos parte de este proceso, por ejemplo, rastreando todas las llamadas de funciones y grabando los valores de entrada y salida. Podría utilizar estos valores en los casos de prueba (esto no funcionaría para todos, pero al menos para algunas funciones). Probablemente también sea posible crear funciones simuladas basadas en los datos recopilados.

Tener tales casos de prueba haría la refactorización una actividad menos peligrosa.

¿Hay alguna solución que ya pueda hacer esto? ¿Cuál sería la forma más fácil de hacer que esto funcione si tuviera que codificarlo yo mismo?

Pensé en usar ctags para encontrar las definiciones de las funciones, y envolverlas en una función que registra los valores de los parámetros. Otra posibilidad sería probablemente un plugin de compilador gcc.

+0

No le parece esta cuestión pertenecen a superuser.com ... ?? –

+2

@ Mr.32: Esta es una pregunta altamente relacionada con la programación, por lo que definitivamente pertenece aquí. –

Respuesta

1

Hay una opción de gcc "-finstrument-functions", que mecanismo puede usar para definir sus propias devoluciones de llamada para cada entrada/salida de la función.

Google y usted puede encontrar muchos buenos ejemplos.

[Editar] con la opción de devolución de llamada de este gcc, solo puede rastrear la entrada/salida de la función, no los parámetros. pero con algunos trucos también puedes rastrear los params. (recorra el puntero del marco actual para obtener el parámetro en la pila).

Aquí es una charla artículo sobre la idea de la aplicación:

http://linuxgazette.net/151/melinte.html

Por otra parte, depende de su sistema embebido, en Linux se puede intentar algo así como ltrace para mostrar los parametros (como la forma strace) Hay muchas herramientas que funcionan con el rastreo de funciones en el espacio de usuario o en el kernel en Linux, ftrace/ust/ltrace/utrace/strace/systemtap /. De todos modos, si no agrega ningún código de depuración, no es posible mostrar los parámetros de la manera correcta. Si acepta los esfuerzos para agregar información de depuración de entrada/salida, entonces es mucho más fácil.

También aquí hay un tema similar sobre este problema.

Tool to trace local function calls in Linux

+0

Esto es muy interesante, pero lamentablemente no puedo ver cómo podría acceder y almacenar el parámetro de funciones originales y los valores devueltos. ¿Es esto posible con esta extensión de compilador? – trenki

+0

Gracias. Tengo que ver si puedo hacer que esto funcione para los procesadores MIPS. – trenki

Cuestiones relacionadas