Spesso mi trovo a impostare un punto di interruzione A da qualche parte nel codice e abilitare manualmente uno o più punti di interruzione quando viene colpito questo punto di interruzione. Un caso tipico è quando eseguo il debug di un unittest e non mi preoccupo dei test precedenti.Abilita punto di interruzione B se il punto di interruzione A è stato colpito
void testAddZeros()
{
Number a(0);
Number b(0);
Number result = a.add(b);
assert((a + b) == Number(0))
}
void testAddOnes()
{
Number a(1);
Number b(1);
Number result = a.add(b);
assert((a + b) == Number(2));
}
void testAddNegativeNumber()
{
Number a(1);
Number b(-1)
Number result = a.add(b);
assert((a + b) == Number(0));
}
immaginate se testAddZeros()
e testAddOnes()
corre bene, ma testAddNegativeNumber()
. In questo caso, impostare un punto di interruzione su Number result = a.add(b);
sarebbe un punto naturale per avviare il debug. Ora immagina che l'errore si trovi in qualche punto profondo all'interno di Number::add
, quindi non siamo realmente interrotti nelle cose che si verificano all'inizio di Numbers::add
. Quello che voglio fare è impostare un breakpoint da qualche parte all'interno di Numbers::add
che si innesca solo se sono all'interno del test testAddNegativeNumber()
.
C'è un modo per abilitare automaticamente il punto di interruzione B
quando viene raggiunto il punto di interruzione A
?
Hai controllato i punti di interruzione condizionali? Probabilmente potresti usare la condizione su cui il punto di interruzione A viene colpito per abilitare il punto di interruzione "condizionale" B. (In tal caso, non hai più bisogno di breakpoint A) – ChristiaanV
@ChristiaanV: sì, ma temo che i punti di interruzione condizionale non è sufficiente in questo caso, almeno non in generale. – larsmoa
Puoi mostrare un esempio di codice, dove vorresti usare questo? – ChristiaanV