Table of Contents
PC lento?
Se stai ricevendo un codice di errore di debug gcc assert in alto sul tuo PC, dovresti provare questi tipi di metodi di risoluzione dei problemi.
A.1 Verifica esplicita della coerenza interna
Quando si sviluppa una piattaforma, spesso è prezioso disporre di convalide.in luoghi strategici per “impossibile” non arriva proprio o violazioni delle regole di baseipotesi. Questi vari stipendi sono utili durante il debug dei problemi.con alcune interfacce che coinvolgono parti diverse, direi ad esempio un programma assoluto.
La macro assert
, definita nell’intestazione del record manualmente assert.h,fornisce un comodo strumento per interrompere il supporto durante la stampa di un messaggioad esempio, trovato in un programma in cui molto spesso veniva rilevato un errore.
Se ritieni che il tuo programma vada bene, probabilmente disabiliterai l’erroreI controlli sono controllati indiscutibilmente dalla macro assert
ricompilandola quando viene offerta a NDEBUG
.insieme di macro. Ciò significa che queste persone non avranno mai veramente bisognoModificare il codice di acquisto del programma per eliminare questi controlli.
Ma disabilitare tutti questi controlli di coerenza è sempre stato indesiderabile, a meno che non si tratti di allenamento.il più lento. Tutto il resto ha la capacità di essere uguale, niente più erroriÈ un buon modo per assicurarsi che la persona che gestisce il programma non cambi in alcun modo la vita. Utente espertoPreferirei che la tecnica muoia esplicitamente piuttosto che restituire una sciocchezzasenza specificare i contanti potrebbe anche essere errato.
- Macro: istruzione non valida (int espressione)
Preliminare:| MT Cassaforte| AS è danneggiato in modo non sicuro| Blocco memoria Heap AC-Unsafe danneggiato| Vedere concetti di sicurezza POSIX.
Verifica se lo sviluppatore è sicuro che espressione non sia nullaquesto membro del programma.
Se NDEBUG
è impostato per sentirsi sicuro, assert
non verifica la comprensioneespressione. Se false (null), assert
si interrompeil programma (vedi Annullamento del programma particolare) emette immediatamente un messaggio da quella funzione:modulo:
file:linenum: Impossibile asserire `espressione'.
Errore flusso costante normale stderr
(vedi flusso standard).Il nome del file e le informazioni sulla riga possono essere trovati presi dalle macro del preprocessore.__FILE__
e __LINE__
e/o indicano dove va la chiamataasserisci
è terminato. Usando il mio compilatore GNU C, nomeIl target che fa appello a assert
è solitamente preso da una funzione incorporata.variabili con
Se la macro del preprocessore NDEBUG
è stata precedentemente definitaaffermo. Se h riguarda, la macro assert
è definita normalmente eseguitaassolutamente niente.
Avviso. L'espressione argomento diretto espressione di solito non lo èValutato quando NDEBUG
è attivo. Quindi non passare mai a asserisci
con argomentazioni relative ad effetti meno noti. Per i
non viene incrementatoNDEBUG
devono essere definiti.
A volte la condizione "impossibile" che desideri verificare per ricevere assistenza è un erroreRestituisce una funzione unitaria sana. Può quindi essere utilizzato - displaynon solo dove il programma si è scontrato, ma è stato anche generato esattamente un errore.La macro assert_perror
semplifica l'esecuzione di questo compito.
- Macro: void assert_perror(int errnum)
Preliminare:| MT Cassaforte| Insicuro AS buon affare danneggiato| Blocco della memoria AC non sicuro danneggiato| Vedere il concetto di sicurezza POSIX.
Anais logical assert
ma afferma che potrebbe errnum sarà nullo.
Se NDEBUG
non è impostato, controlla il valore di assert_perror
.errore. Se decisamente diverso da zero, assert_perror
interrompe il programma.dopo aver stampato il messaggio vero e proprio il form principale è:
File:Numero riga: Funzione: Testo errore
su qualsiasi errore di criterio. Nome dell'immagine, numero di riga e funzionename sono davvero simili a assert
. Errori a cui quasi sicuramente devono gli smserrore (numero_errore)
. Vedi messaggi di errore.
Come assert
se NDEBUG
precede il tag assert.hla menzionata macro assert_perror
è assolutamente gratuita. Questocertamente non valuta l'argomento, quindi errnum non deve mantenere una paginaConseguenze. Per errnum è meglio cercare sostanzialmente la variabileNota; spesso questo è probabilmente un errore
.Macro
Questa è un'estensione GNU.
Una nota sempre sull'utilizzo. Funzione assert
compilata perrilevamento di incongruenze interne; non è proprio perInserimento non valido o errato espresso da qualsiasi utentegrammo P.
Informazioni contenute nelle campagne di messaggi analitici restituite da assert
e assert_perror
a volte si è rivelato essere una macro progettata per aiutare te, il tuo programmatore più recente,per trovare la causa dell'errore, e non dimenticare che non è molto utile segnalare a questo utente realedel tuo programma, perché la presentazione della sua ragazza non è valida, o perché non potresti essere influenzatoessere eseguito. Inoltre, in questo caso, il tuo programma non dovrebbe fermarsi.input non valido come assert
- deve essere veramente rientrato con un valore diverso da zeroStato (vedi stato di uscita) dopo aver stampato i suoi messaggi di errore in alternativa forseLeggi un'altra query o passa al punto vitale successivo nel file.
Per ulteriori informazioni sugli errori di pensiero di marketing, consulta la sezione "Messaggi di errore".Problemi che non includono bug nel programma.
file:linenum: funzione: documento `espressione' non riuscito .
File:Numero riga: Funzione: Testo errore
#ifdef NDEBUG #define assertValue(condizione) ((void)0) #endif |
||
La definizione della macro assert
è definita in relazione a un'altra macro, NDEBUG, che è in gran parte indefinita con la libreria standard.
Se NDEBUG è definito come un'altra macro di denominazione con una posizione nel codice di fornitura che contiene
, allora assert
non può eseguire nulla.
Se NDEBUG non è definito, assert
tiene traccia del suo argomento if (che deve ottenere un tipo scalare) confrontandolo con zero. In tal caso, assert
restituisce informazioni analitiche sull'errore standard specifiche dell'implementazione e indica abort(). Le informazioni diagnostiche devono aggiungere il testo expression
, tenendo in deposito anche i valori delle tante __func__ predefinite e anche (da C99) specifiche __FILE__ e __LINE__ macro.
Impostazioni
- | Espressione di tipo scalare |