Analizar y agregar declaraciones de depuración en el archivo de código fuente de C++

Estoy cansado de depurar un flujo de mi código de proyecto oficial: se distribuye en varios archivos y millones/miles de líneas. Por lo tanto, comencé a escribir un programa en C++ que tomaría nombres de archivo de entrada de un archivo cuyo objetivo es agregar printf(,ARCHIVO ,LÍNEA); - Declaraciones de depuración adicionales después de cada declaración de C++ como:

void my_func()
{
call_other();
}
in file 1.cpp at line 1

Se convertiría

void my_func()
{
call_other();
printf("call_other() 1.cpp 1")
}

Entonces, cada código de archivo se analizaría y se agregaría esta declaración de depuración adicional.

Pero el problema surge con varios tipos de declaraciones:

if(condition) statement else statement;
C++ templates
switch case
etc

No puedo establecer una gramática que deba seguir, como:

Si la línea termina con un punto y coma y el siguiente token no es '{', agregue esta línea de depuración.

Creo que hay más casos de los que estoy pensando. ¿Alguna sugerencia que deba considerar antes de implementar lo mismo en miles de archivos que se acumulan en millones de líneas de código?

¿Hay alguna herramienta/técnica conocida que ya pueda utilizar?

preguntado el 12 de junio de 12 a las 14:06

describa el problema que la solución defectuosa pretende resolver, por favor:

También acepta más respuestas. Si no acepta, es menos probable que la gente responda. -

¿Por qué no simplemente recorrer el código usando un depurador? -

¿Por qué no simplemente aprender a usar un depurador? -

Estoy tratando de enumerar todo; el problema es que una vez que me encontré con miles de archivos y comencé a tener un error de compilación o interrupciones en el flujo, sería realmente problemático encontrar la causa del problema de mis modificaciones. -

1 Respuestas

Si es absolutamente necesario hacer esto, eche un vistazo a sonido metálicoy escriba un traductor de fuente a fuente que funcione en el nivel AST. Hay varias publicaciones en la red que pueden ayudarlo a comenzar con esto. Un ejemplo: http://eli.thegreenplace.net/2012/06/08/basic-source-to-source-transformation-with-clang/

Respondido el 12 de junio de 12 a las 14:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.