Domanda

Ho un semplice ascoltatore UDP scritto in C ++ utilizzando win32 quando ho compilare ed eseguire il programma in modalità di debug funziona perfettamente, e sono chiaramente in grado di vedere le informazioni dai pacchetti che sto ricevendo. Quando ho eseguito questo stesso codice come un build di rilascio si compila bene e sembra che vada tutto bene, ma la sua non stampare le informazioni del pacchetto come ha fatto sotto la build di rilascio. Ho cercato di rispecchiare le configurazioni di build in modo che corrisponda esattamente, ma la sua ancora accadendo. Ogni suggerimento sarà molto apprezzato.

È stato utile?

Soluzione

Questo è più probabile un problema di non inizializzazione delle variabili per un valore di partenza, in modo da eseguire il debug di essi hanno una sorta di valore, ma in rilascio, la maggior parte delle cose vengono inizializzati a zero (NULL). Così, qualche condizione / ramo può essere in atto, che non ti aspetti ... Senza il codice sorgente, per esempio, è davvero difficile da individuare i problemi.

Questo mi ha po 'più di una volta .. :)

Ciò presuppone non si aspettava di vedere qualcosa con cose come OutputDebugString () come Mehrdad suggerito ...

Inoltre, assicurarsi che i pacchetti sono sotto 1024 byte di dimensione, o non sarà possibile ottenere loro. Mi ci volle un po 'per capire questo fuori indietro quando XP è venuto fuori, e non riuscivo a capire il motivo per cui il mio codice ha lavorato nel 2000, ma non XP ... Anche se inviare (sendto) sarebbe tornato successo, non è mai in realtà ha inviato il pacchetto ..

In ogni modo, ho avuto a che fare con UDP molto su Win32, quindi se mi dai qualche esempio di codice dovrei essere in grado di aiutare di più ...

Ma in ogni modo, controllare che tutte le variabili sono inizializzate a una sorta di valore di default sia il mittente e il destinatario, (che è solo una buona pratica), e poi ri-costruire e riprovare. Inoltre, controllare la dimensione dei pacchetti con un sizeof () prima di inviare, e se è maggiore di 1024 byte, non preoccupatevi ... E 'anche una buona idea controllare dimensione del pacchetto ricevuto, e se non è esattamente la dimensione ci si aspetta, quindi cadere il pacchetto. Questo vale più vero per le trasmissioni, ma si applica ancora.

Fatemi sapere se tutto questo ha aiutato, ho postato un sacco di codice UDP su un'altra domanda qui un po 'di tempo fa, e che il codice funziona, si potrebbe desiderare di fare riferimento ad esso.

Altri suggerimenti

Il codice che genera informazioni di debug sui pacchetti è probabilmente messo a nudo fuori per motivi di prestazioni nella build di rilascio.

Questo è fatto per lo più da due cose:

  • direttive del preprocessore condizionali che controllano contro modalità di debug e generare codice appropriato in tale modalità.
  • che collega contro versione di debug delle librerie.

cadere quei roba è in realtà, lo scopo principale che si intende creare una versione di rilascio. Non è gonna bisogno informazioni di debug in modo che non sarà sacrificare le prestazioni per esso. Se siete veramente vuole fare così, allora perché non basta spedire il debug [ Aggiornamento: come già sottolineato in un commento, sembra che la licenza non consente di distribuire il software collegato contro librerie di debug ]? E 'la configurazione più simile (non si può ottenere più di una configurazione simile di identica, si può?)

Come cosa stai stampando le informazioni? Alcune macro come TRACE non fanno nulla nella build di rilascio.

Se si stampa utilizzando fprintf o qualche equivalente, non necessariamente scrivere nulla fino a quando si chiama fflush -. La versione di debug può fare per voi più di frequente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top