Sto debug di una funzione molto complessa C++ che mi dà alcuni risultati inaspettati sotto alcuni input. Mi piacerebbe confrontare le esecuzioni di codice con input diversi in modo da scoprire quale parte mi provoca bug. Il strumento che può confrontare percorsi di esecuzione di codice è quello che sto cercando. Per favore fatemi sapere se esiste uno strumento del genere. O altrimenti se ci sono alcune tecniche che posso impiegare per fare la stessa cosa?Confronta percorsi di esecuzione dello stesso codice sotto diversi ingressi
Per descrivere concretamente il mio problema, qui sto usando un esempio forzato.
dire che questo è la funzione in pseudocodice ,
double payTax(double income)
{
if (income < 10000)
return noTax();
else if (10000 < income < 30000)
return levelOneTax();
else if (30000 < income < 48000)
return levelTwoTax();
else
return levelThreeAboveTax();
}
ingresso Dato 15000, la funzione calcola l'importo esatto dell'imposta, ma in qualche modo ingresso 16000 fornisce una quantità tassa erronea. Presumibilmente, l'input 15000 e 16000 farebbe in modo che la funzione attraversasse esattamente gli stessi percorsi di esecuzione; d'altra parte, se vanno su percorsi diversi, allora qualcosa deve essere andato storto all'interno della funzione. Pertanto, uno strumento che confronta i percorsi di esecuzione rivelerebbe abbastanza informazioni che potrebbero aiutarmi a identificare rapidamente il bug. Sto cercando uno strumento del genere. Preferibilmente compatibile con Visual Studio 2010. Sarebbe meglio se un tale strumento mantenga anche i valori delle variabili.
P.S. il debug è l'ultima cosa che voglio fare perché la base di codice con cui sto lavorando è molto più grande e complessa rispetto al banale esempio payTax.
Per favore aiuto. Grazie.
Avete Visual Studio 2010 installato e funzionante? In tal caso, hai provato a posizionare un punto di interruzione all'inizio della funzione 'payTax()', e poi eseguendo il programma nel debugger? –
Sì. Come ho già detto, la funzione reale è mille volte più complessa dell'espansione inventata. Potrei usare il debugger, ma mi costerebbe molto più tempo che se avessi uno strumento del [email protected] Dan Nissenbaum – Shuo
Senza dettagli completi è difficile dare una buona risposta, ma il debugger fa molto più che semplici breakpoint e single-stepping. È possibile utilizzare i punti di interruzione condizionali per tracciare quando l'esecuzione termina in qualche modo inaspettato con una pre-condizione specifica. Per il tuo esempio, il punto di interruzione potrebbe essere attivato solo su un determinato intervallo di input. – JasonD