Domanda

Ecco un esempio di uno dei mal di testa Voglio dire:

Abbiamo un progetto multipiattaforma che utilizza le stringhe Unicode per lo più per il rendering del testo sullo schermo. Su Windows in VC ++ la riga:

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

compila bene e stampa l'ampia stringa nel altra stringa di larghezza. Tuttavia, questo in realtà dovrebbe essere:

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

senza sostituire il '% s' con un 'ls%' questo non funzionerà su altre piattaforme. Come test nel nostro ambiente su Windows è più facile, più veloce e molto più semplice per eseguire il debug. Questo tipo di bug può facilmente passare inosservato.

So che la soluzione migliore è quella di scrivere codice corretto, in primo luogo, ma sotto la pressione semplici errori sono fatti, e in questo caso particolare, l'errore può facilmente passare inosservato per un lungo periodo di tempo.

Ho il sospetto che ci sono molte variazioni su questo tipo di bug, che siamo ancora godere.

Qualcuno ha un modo piacevole e pulito di trovare questo tipo di bug?

: D

È stato utile?

Soluzione

Per quanto nessuna delle funzioni della famiglia *printf sono typesafe si sia

  • Ricerca per errori probabili tramite espressioni regolari e fissarli manualmente
  • utilizzare un altro approccio che è typesafe, forse sulla base di stringstreams o boost.format

Altri suggerimenti

Si potrebbe desiderare di avere uno sguardo a FastFormat in caso Boost.Format è troppo lento per le vostre esigenze .

Rispetto al stringstreams e Boost.Format:

  
      
  • iostreams: FastFormat.Format è   più veloce di iostreams, tra il   ~ 100-900%, in tutti i casi
  •   
  • Boost.Format: FastFormat.Format è   più veloce di Boost.Format, tra il   ~ 400-1650%, in tutti i casi
  •   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top