2012-02-23 2 views
8

Ho una grande base di codice di codice C piuttosto vecchio su un sistema embedded e sfortunatamente non ci sono casi/suite di test automatici. Ciò rende il codice di ristrutturazione e di refactoring un compito pericoloso.C chiamata di funzione e tracciamento dei parametri - test case e generazione fittizia

La scrittura manuale dei casi di test richiede molto tempo, quindi ho pensato che dovrebbe essere possibile automatizzare almeno parte di questo processo, ad esempio tracciando tutte le chiamate di funzione e la registrazione dei valori di input e output. Potrei quindi utilizzare questi valori nei casi di test (questo non funzionerebbe per tutti ma almeno per alcune funzioni). Probabilmente sarebbe anche possibile creare funzioni di simulazione basate sui dati raccolti.

Avere tali casi di test renderebbe il refactoring un'attività meno pericolosa.

Ci sono soluzioni che possono già farlo? Quale sarebbe il modo più semplice per farlo funzionare se dovessi codificarlo da solo?

Ho pensato di utilizzare ctags per trovare le definizioni di funzione e avvolgerle in una funzione che registra i valori dei parametri. Un'altra possibilità sarebbe probabilmente un plugin per compilatore gcc.

+0

Non pensi che questa domanda appartengono a superuser.com ... ?? –

+2

@ Mr.32: Questa è una domanda altamente correlata alla programmazione, quindi appartiene sicuramente a questo. –

risposta

1

Esiste un'opzione gcc "-finstrument-functions", il meccanismo che è possibile utilizzare per definire i propri callback per ogni entrata/uscita di ogni funtion.

Google e puoi trovare molti buoni esempi.

[Modifica] con questa opzione di gcc, è possibile solo tenere traccia dell'entrata/uscita della funzione, non dei parametri. ma con alcuni trucchi puoi anche monitorare i parametri. (attraversa il puntatore del fotogramma corrente per ottenere il parametro in pila).

Ecco un colloquio articolo circa l'idea di realizzazione:

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

Inoltre, dipende dal vostro sistema embedded, su linux si può provare qualcosa di simile ltrace per mostrare i params (come il modo strace). Esistono molti strumenti per il funzionamento della funzione trace in userspace o kernelspace su linux, ftrace/ust/ltrace/utrace/strace/systemtap /. Ad ogni modo, se non si aggiunge alcun codice di debugging, non è possibile visualizzare i parametri nel modo corretto. Se accetti gli sforzi per aggiungere informazioni sul debug di entrata/uscita, allora è molto più semplice.

Anche qui un discorso simile parla di questo problema.

Tool to trace local function calls in Linux

+0

Questo è molto interessante ma sfortunatamente non riesco a vedere come potrei accedere e memorizzare il parametro delle funzioni originali e restituire i valori. Questo è possibile anche con questa estensione del compilatore? – trenki

+0

Grazie. Devo vedere se riesco a farlo funzionare per processori MIPS. – trenki