Potrebbe dirmi cosa potrebbe causare un errore SIGABRT in C++?Che cosa causa un errore SIGABRT?
risposta
Ciò accade di solito quando le librerie incontrano errori interni, quindi chiamano abort(), perché non possono continuare. Questo potrebbe accadere quando sovrascrivi una delle sue strutture dati (quella che appartiene alla funzione da libc per esempio). Quindi questo potrebbe essere ad es. libc calling perché hai sovrascritto qualcosa. E l'applicazione deve quindi terminare perché è impossibile continuare o gestirla, che è chiamata asserzione fallita.
Per Wikipedia,
SIGABRT
viene inviato dal processo stesso quando chiama la funzione libcabort
, definito instdlib.h
. Il segnaleSIGABRT
può essere catturato, ma non può essere bloccato; se il gestore di segnale ritorna, tutti i flussi aperti vengono chiusi e scaricati e il programma termina (scaricando il core se necessario). Ciò significa che la chiamataabort
non restituisce mai. A causa di questa caratteristica, viene spesso utilizzato per segnalare condizioni fatali nelle librerie di supporto, situazioni in cui l'operazione corrente non può essere completata ma il programma principale può eseguire la pulizia prima di uscire. Viene utilizzato quando un'asserzione fallisce.
Ciò significa che se il codice è chiamando abort
direttamente né l'invio di per sé il segnale SIGABRT
via raise
, e non si ha nessun affermazioni in mancanza, la causa deve essere che una libreria di supporto (che potrebbe essere libc) ha riscontrato un errore interno. Se fornite i dettagli del vostro programma potremmo essere in grado di suggerire possibili cause. Ancora meglio, se si esamina un core o si esegue il programma in un debugger, si dovrebbe essere in grado di raccogliere una traccia dello stack, che mostrerà quale libreria ha causato l'interruzione del programma.
(E 'anche possibile che un altro programma sul vostro sistema sta inviando il vostro programma SIGABRT
, ma questo è nella maggior parte dei casi infinitamente improbabile.)
In pratica questo di solito è innescata dalla macro assert:
char* foo = NULL;
assert(foo != NULL);
si tradurrebbe in SIGABRT
- 1. Come rintracciare la causa di SIGABRT
- 2. Xcode 4.2 SIGABRT Errore
- 3. Che cosa causa java.lang.IncompatibleClassChangeError?
- 4. Che cosa causa un errore HTTP 503 HttpListener?
- 5. Che cosa causa HttpHostConnectException?
- 6. Che cosa causa l'errore ENOTCONN?
- 7. SIGABRT in malloc.c, cosa è successo?
- 8. Che cosa causa EventMachine :: ConnectionNotBound?
- 9. Qualcuno sa che cosa causa questo errore? VC++ con VisualAssert
- 10. Sigabrt on Funzione principale
- 11. Errore Xcode - Thread 1: signal SIGABRT
- 12. Che cosa causa la causa ricorsiva in un'eccezione?
- 13. Che cosa causa questo bug di ggplot2?
- 14. Che cosa causa "NSScanner: nil string argument"?
- 15. Che cosa causa questo comportamento del mouse?
- 16. Che cosa causa maps.googleapis.com/maps/vt per restituire un errore 400?
- 17. Che cosa causa ad EventSource l'attivazione di un errore nell'estensione di Chrome?
- 18. Che cosa causa questo errore? "Errore di runtime 380: valore di proprietà non valido"
- 19. Programma ricevuto segnale SIGABRT
- 20. django __init__ metodo che causa argomento errore
- 21. Mapapi v2 in Android che causa un errore nel frammento
- 22. Entity Framework che causa un errore di timeout
- 23. Perché Obsoleto causa un errore?
- 24. Xcode non mostra la linea che causa un crash
- 25. Che cosa significa errore "org.hibernate.DuplicateMappingException"?
- 26. Swift: segnale Thread 1 SIGABRT
- 27. locationOfTouch ha come risultato SIGABRT
- 28. Che cosa causa l'errore Skrill LOCK_LEVEL_9 quando si inviano soldi?
- 29. Perché questa definizione separata causa un errore?
- 30. NSMutableArray removeObjectAtIndex causa errore
Buon punto !! :) ho provato a cercare su esso dice la sua un segnale che viene inviato per annullare il processo dal compilatore per il sistema, ma il mio compilatore non dice quale parte sta causando questo insolito comportamento, al n freccia in giù su questo, ho chiesto possibili ragioni. Il mio codice è lungo 500 righe. – user1444426
@ user1444426 - Compilalo in modalità debug (-g con g ++), usa dbx e troverà il problema. –
@Ecatmur, la pagina di Wikipedia non è davvero così utile. Tutto ciò che dice è che "abort" solleva quel segnale, ma non va oltre. A volte ricevo segnali 'SIGABRT' nei miei programmi, ma non ho * mai * chiamato direttamente' abort'. –