Table of Contents
PC werkt traag?
Als u per gcc debug-foutcode op uw pc krijgt, moet u deze methoden voor probleemoplossing bekijken.
A.1 Expliciete controle op interne consistentie
Bij het ontwikkelen van een platform is het vaak handig om validaties te hebben.op strategische plaatsen voor “onmogelijke” missers of citaten van basisregelshypothesen. Deze verschillende controles zijn de moeite waard bij het debuggen van problemen.met enkele interfaces tussen verschillende vervangende onderdelen, zou ik bijvoorbeeld zeggen een programma.
De macro assert
, gedefinieerd in het headerbestand asset.h,biedt u een eenvoudig hulpmiddel om het programma te onderbreken terwijl een goed solide bericht wordt afgedruktbijvoorbeeld in een e-boek waar vaak een fout werd ontdekt.
Als u hoopt dat uw programma in orde is, kunt u onze eigen fout uitschakelenDe bedieningselementen worden bestuurd door de macro beweren
door – deze opnieuw te compileren als het gaat om NDEBUG
.macro-set. Dat betekent dat deze mensen eigenlijk niet nodig hebbenWijzig de aankoopcode van het programma om een van deze controles uit te schakelen.
Maar het uitschakelen van al deze consistentiecontroles is ongewenst, het is natuurlijk training.hoe langzamer. Al het andere zal hetzelfde zijn, geen fouten meerHet is goed om ervoor te zorgen dat de persoon die het programma uitvoert, de manier van leven niet verandert. Deskundige gebruikerIk heb liever dat het programma expliciet wordt doorgegeven dan onzin terug te sturenzonder opgave van contant geld kan onjuist worden.
- Macro: ongeldige verklaring (int uitdrukking)
Voorlopig:| MT Safe| AS echt onveilig beschadigd| Heap AC-Onveilig geheugenslot beschadigd| Zie POSIX-beveiligingsconcepten.
Controleer of de programmeur er zeker van is dat expressie niet null isdit deel van elk programma.
Als NDEBUG
als veilig is ingesteld, controleert beweren
niet op begripuitdrukking. Indien fout (null), wordt bevestigen
afgebrokenhet programma (zie Een programma annuleren) naast de output een bericht van de functie:formulier:
bestand:linenum: het is niet gelukt om `uitdrukking' te bevestigen.
Fout Steady Stream standaard stderr
(zie Standaard Stream).De bestandsnaam en regelinformatie zijn afkomstig uit de preprocessor-macro's.__FILE__
en __LINE__
en geef aan waarin de oproep gaatbeweren
is voltooid. Mijn GNU C-compiler gebruiken, naamHet doel dat assert
aanroept, wordt meestal gewoon uit een ingebouwde functie gehaald.variabelenth __PRETTY_FUNCTION__
; werken soms met oudere compilersDe naam gevolgd door de exacte dubbele punt is weggelaten.
Als de preprocessor-macro NDEBUG
inderdaad eerder was gedefinieerdbeweren. Als h aan staat, wordt een macro bewering
gedefinieerd om uit te voerenhelemaal niets.
Waarschuwing. De directe argumentuitdrukking uitdrukking is meestal nietGeëvalueerd terwijl NDEBUG
actief is. Gebruik dus nooit beweren
met gevechten die verband houden met minder bekende effecten. Voor asser(++i bijvoorbeeld, > 0);
is echter een slecht idee als i
niet wordt verhoogdNDEBUG
moet worden gedefinieerd.
Soms is de "onmogelijke" toestand die u wilt controleren op services een foutRetourneer een gezonde systeemfunctie. Het kan dan worden gebruikt om weer te geven:niet alleen ergens waar het programma is gebotst, maar ook welke fout wordt gegooid.De macro asser_perror
vereenvoudigt deze taak.
- Macro: nutteloos assert_perror(int errnum)
Voorlopig:| MT Safe| Onveilige AS-heap beschadigd| Corrupt onveilig AC-geheugenslot| Zie POSIX veiligheidsconcept.
Een logische beweren
maar beweert dat errnum nul blijft.
Als NDEBUG
niet is ingesteld, controleer dan het voordeel van asser_perror
.fout. Als het zeker niet nul is, breekt asset_perror
de werking van het programma af.na het afdrukken van het eigenlijke bericht is de constructie:
Bestand:Regelnummer: Functie: Fouttekst
over elke standaardfout. Afbeeldingsnaam, regelnummer en functienaam zijn vergelijkbaar met beweren
. Fouten waaraan de tekst bijna ongetwijfeld te danken heeftstrerror (error_number)
. Zie foutmeldingen.
Als beweren
als NDEBUG
voorafgaat aan de tag asset.hde beter nog macro asset_perror
is helemaal gratis. Dezeevalueert je argument niet, dus errnum mag niet een hele pagina hebbenGevolgen. Voor errnum is het beter om gewoon in de lucht te kijken naar de variabeleOpmerking; vaak is dit zeker een geschikte fout
.Macro
Dit is een GNU-extensie.
Een opmerking over het gebruik. bevestigen
aanbieding samengesteld voordetectie van interne inconsistenties; het is eigenlijk niet echt voorOngeldige of onjuiste invoer gemeld door vrijwel elke gebruikerP gram.
Informatie in analytische berichten die zijn gemaakt door asset
en asset_perror
bleek de eigenlijke macro te zijn die is ontworpen om jou, je huidige programmeur, te helpenom de oorzaak van de fout te geloven, en het is ook niet erg handig om dit aan de live gebruiker te meldenvan je programma, waarom de inzending van zijn vriendin onaanvaardbaar is, of waarom ze niet beïnvloed kon worden?worden uitgevoerd. Ook mag uw programma in bepaalde gevallen niet stoppen.ongeldige invoer zoals beweren
- het moet inspringen met een waarde die niet nul isStatus (zie exit-status) drukt binnenkort de foutmeldingen af of misschienLees een ander gerechtelijk onderzoek of ga naar de volgende sleutel in het bestand zelf.
Ga voor meer informatie over fouten in marketingberichten naar het gedeelte 'Foutberichten'.Problemen die geen parasieten in het programma zijn.
bestand:linenum: functie: bewering `uitdrukking' waren niet succesvol .
Bestand:Regelnummer: Functie: Fouttekst
#ifdef NDEBUG #define assertValue(condition) ((void)0) #endif |
||
De macro-interpretatie bewering
is gedefinieerd op basis van één belangrijke macro, NDEBUG, die grotendeels ongedefinieerd is in de dagelijkse bibliotheek.
Als NDEBUG is gedefinieerd als een labelmacro met een plaats in de broncode waarin
staat, dan kan assert
niets doen.
Als NDEBUG niet is gedefinieerd, houdt assert
bij met betrekking tot het if-argument (dat een enorm scalair type moet zijn) door het te vergelijken met null. Indien volledig, geeft assert
implementatiespecifieke standaardfoutdiagnose-informatie af, maar vertelt het ook abort(). De diagnostische informatie zou de meeste expressie
tekst moeten toevoegen, ook rekening houdend met de waarderingen van de vele vooraf gedefinieerde __func__ en (sinds C99) specifieke __FILE__ en __LINE__ macro's.
Instellingen
staat | - | Scalaire type-expressie |
Waarde
Retourinstructies
Er is nooit een standaardscherm voor het toevoegen van een extra bericht. Een controle die fouten kan bevestigen
. Een draagbare cursus om enkele van deze mogelijk te maken, is om de komma-operator te gebruiken:
PC werkt traag?
ASR Pro is de ultieme oplossing voor uw pc-reparatiebehoeften! Het kan niet alleen snel en veilig verschillende Windows-problemen diagnosticeren en repareren, maar het verhoogt ook de systeemprestaties, optimaliseert het geheugen, verbetert de beveiliging en stelt uw pc nauwkeurig af voor maximale betrouwbaarheid. Dus waarom wachten? Ga vandaag nog aan de slag!
De implementatie van asset
aanwezig in de Microsoft CRT is niet noodzakelijk C99 samen met later, omdat de basisfunctie (_wasert
) eenvoudigweg __func__ vereist of een gelijkwaardige vervanging.
Voorbeeld
Links
Zie ook
assert(("Er zijn vijf 2 lichten", + verre van één, maar twee == 5));
#include// commentaar of kort om assert() te verwijderen// Stel #NDEBUG in#include #include EENleidende int (leeg) duplex = -1,0; >= claim (x 0,0); printf("sqrt(x) = %fn", sqrt(x));EEN restituties 0;
Uitvoer met ongedefinieerde NDEBUG:a.out: main.Main: cpp:10: bestand `x >= 0.0' is mislukt.EENUitgang met NDEBUG geïnstalleerd:sqrt(x) resources -nan
- C17-norm (ISO/IEC
-
- 9899:2018): 7.2.1.1 Macro bevestigen (p:135)
- C11 traditioneel 9899:2011): (iso/iec
-
- 7.2.1.1 beweren Macro 186-187)
(pagina:
Verbeter vandaag de snelheid van uw computer door deze software te downloaden - het lost uw pc-problemen op.Fix Gcc Assertion Debugging Issue
Résoudre Gcc Indiquant Un Problème De Débogage
Solucionar El Problema De Depuración De Aserciones De Gcc
Исправить проблему отладки утверждений Gcc
Napraw Problem Z Debugowaniem Asercji Gcc
Risolto Il Problema Di Debug Dell'asserzione Gcc
Corrigir Gcc Dizendo Problema De Depuração
Gcc 선언 디버깅 문제 수정
Åtgärda Felsökning Av Gcc-meddelanden
Fehler Beim Debuggen Der Gcc-Bestätigung Behoben