Quando colpisco un problema del mondo reale davvero doloroso, a volte aiuta a fuggire in una terra di finzione in cui assurde ipotesi possono essere fatte - e quindi a lavorare all'indietro da questo mondo più piacevole.
Quindi, rimodelliamo il tuo problema come uno che ... beh, fa schifo meno con cui avere a che fare.
Diciamo che sai che la prossima volta che questa funzione viene eseguita e qualcuno tenta di stampare un'etichetta, otterrai questo comportamento duplicato. Tuttavia, questo non è un mondo perfetto: non è possibile modificare la richiesta o utilizzare il debug passo dopo passo per risolvere il problema una riga alla volta.
Quindi, come scoprirai che cosa l'ha causato questa volta, quando non puoi semplicemente "rifarlo di nuovo" e farlo accadere di nuovo?
In breve, disconnettendo le tracce dello stack e le informazioni di debug, identificando la domanda più critica a cui è necessario rispondere. Il più ovvio è, come minimo, ciò che viene inviato ESATTAMENTE alla stampante? Viene detto alla stampante una volta di stampare un articolo, o viene ripetuto più e più volte, oppure viene indicato una volta ma con una quantità specificata?
Una "cosa più semplice possibile che potrebbe funzionare" è quella di registrare esattamente ogni singola richiesta di stampa, con l'aspettativa che questo potrebbe essere un grosso log (gestirlo con quello in fase di pianificazione). All'ultimo passaggio prima che una richiesta venga inviata alla stampante, registra esattamente ciò che viene inviato. A seconda dell'implementazione, questo potrebbe significare avvolgere uno streamwriter in un buffer, ecc. - qualunque cosa tu debba fare).
Questo registro dovrebbe consentire di "ristampare" qualsiasi etichetta utilizzando solo le informazioni proprio lì nel registro, quindi puoi semplicemente "inviare nuovamente" la richiesta e farlo funzionare ESATTAMENTE come se la richiesta fosse stata creata dal sistema nel normale la moda.
Quindi, la componente umana - hai bisogno di qualcuno che prenda nota di quando si verifica l'errore, il più vicino al tempo esattamente come quando accade (quindi puoi andare a caccia di una data / ora approssimativa), e persino allegare una delle duplica le etichette sul tuo piccolo "bug report" pezzo di carta con il tempo trascorso. Se potessero prendere nota di ciò che è accaduto prima e di ciò che è venuto dopo, sarebbe ancora meglio - ma questo è ovviamente soggetto a flussi di lavoro che potrebbero essere fuori mano. L'etichetta sospetta e un timestamp approssimativo sarebbero tuttavia estremamente utili.
Quindi cerchi i tuoi file di registro potenzialmente enormi per quell'evento e lo studi. Riattivi quell'etichetta e vedi se succede con quella copia esatta e perfetta della richiesta - o se funziona normalmente. Osservi attentamente ogni byte della richiesta e assicurati che sia perfettamente conforme alle specifiche e come qualsiasi altra richiesta appropriata.
Assicurati che questo sia esattamente ciò che viene inviato alla stampante, anche se devi avere qualcuno che installa un'appliance di rete come un ripetitore invisibile che registra il traffico di rete in modo da poter essere sicuro che funzioni davvero come pensi funziona.
In breve, lo si restringe: la richiesta alla stampante è negativa o no?
Indipendentemente da ciò, imparerai qualcosa da questo. O impari che il software sta rovinando la richiesta, o è "qualcos'altro". Questo sta definendo e limitando l'ambito del problema.
Allora cosa? Bene, puoi sempre provare una stampante diversa, un nuovo computer che genera le richieste, una nuova rete / cavo alla stampante, ecc. La diagnosi tramite scambio di parti è una tradizione consolidata in tutti i campi meccanici:)
Se tutto il resto fallisce, elencare questo risultato duplicato come un "evento raro, approssimativamente una volta al mese", impossibile replicare in modo affidabile, sapere "aggirare le etichette extra", ecc ... dichiarare che è causato da fantasmi, con relativo XKCD :
...eaccettachealcunecosenonsonodestinateaessereconosciutedall'uomo.Ungiornoilproblemascomparirà,nessunosapràilperché,eunabuonastoriadacondividereconiprogrammatoriespertiungiorno,quando"misteri di programmazione inspiegabili" diventerà l'argomento del pranzo.