Credo che il tuo problema sia più linguistico - il termine "errore logico" è molto vago, e il termine "tempo in cui accade" può significare cose diverse per persone diverse.
Diciamo che scrivi un semplice programma di calcolatrice. Ti permetterà di inserire qualcosa come "1 + 2" dalla tastiera, calcolare e visualizzare il risultato. Ora inserisci "1 + 2" e visualizza non il valore previsto 3, ma 4. Quindi esattamente "quando" si verifica questo errore logico? Dal punto di vista degli utenti, accade proprio quando vede il risultato sbagliato.
Ma la causa può essere ovunque - i dati di input possono essere analizzati in modo errato, il calcolo potrebbe essere andato storto, o il display sullo schermo ha avuto un bug. Quindi dal punto di vista dell'utente, la causa dell'errore è da qualche parte "prima che accada". Tuttavia, dal punto di vista degli sviluppatori, chi usa un debugger esegue il single-stepping del programma, lo "stato di esecuzione del programma" è errato immediatamente nel momento in cui il parser di input fornisce un risultato errato o il calcolo restituisce un errore risultato, o il codice che porta il risultato sul display fa qualcosa di sbagliato. Quindi da questa prospettiva, la causa dell'errore logico è esattamente dove lo stato interno del programma si discosta dal valore atteso.