In Ubuntu ho riscontrato molte volte l'errore di segmentazione. Che cos'è un errore di segmentazione e quando si verifica?
In Ubuntu ho riscontrato molte volte l'errore di segmentazione. Che cos'è un errore di segmentazione e quando si verifica?
Risposte:
Un errore che dice un errore di segmentazione (o segfault o SIGSEGV ) in Ubuntu e altri sistemi operativi simili a Unix o che dice un errore di protezione generale in Windows, è quando un programma tenta di accedere a una parte della memoria a cui non è possibile accedere, o a cui il programma è vietato l'accesso. Un errore di segmentazione è un tipo di arresto anomalo del programma, ovvero un'interruzione anomala di un programma. Vedi gli articoli di Wikipedia su incidenti , protezione della memoria , errore di segmentazione , errore di protezione generale , e SIGSEGV per ulteriori informazioni (e di una comprensione più strutturata del tema che è qui presentato).
Un errore di segmentazione è quasi sempre dovuto a un bug nel programma in cui si verifica. Immagino che la maggior parte o tutti i tuoi errori di segmentazione provengano dalla stessa applicazione. Fornisci maggiori dettagli sulle circostanze in cui si verificano errori di segmentazione sulla tua macchina e su quale programma sta andando in crash. Fornisci anche il testo completo ed esatto del messaggio di errore che stai ricevendo e tutti gli altri messaggi che appaiono prima di esso. Ciò dovrebbe consentirci di fornire consigli dettagliati specifici per il tuo problema (anziché solo informazioni generali su cosa sia un errore di segmentazione).
Il modo migliore per fornire queste informazioni è modificare la domanda per includerla . In alternativa, se si desidera che questa domanda riguardi solo gli errori di segmentazione in generale, è possibile pubblicare una nuova domanda per porre domande su ciò che sta causando in modo specifico gli errori di segmentazione (in tal caso, assicurarsi di fornire tutti questi dettagli nella nuova domanda) .
L'errore di segmentazione è causato da un bug nell'applicazione. Tecnicamente significa che l'applicazione tenta di leggere o scrivere su una parte della memoria che non appartiene ad essa (o non esiste). È ovviamente vietato leggere o scrivere nella memoria di qualcun altro e quando il sistema (kernel) lo rileva, forzerà la chiusura dell'applicazione.
Sono finiti i giorni in cui le persone erano solite rintracciare il codice assembly e eseguire il debug di un problema. Abends, Dr Watson, errore di segmentazione. Quei giorni verdi sono andati.
Uno dei motivi di un errore di segmentazione è quando il codice che ha accesso diretto alla memoria fallisce. Quando un pezzo di codice tenta di accedere al segmento di memoria di un'altra applicazione, si verifica un errore di segmentazione. Le allocazioni di memoria vengono talvolta spostate per consentire l'allocazione di blocchi contigui di memoria più grandi. Mentre tenta di ripristinare, il kernel si impegna a fondo per salvare tutte le informazioni sulla memoria in un file, lo stato corrente di tutte le applicazioni in esecuzione sulla cpu e il loro stato (ultima istruzione eseguita) in un file e muore. Tenterà inoltre di archiviare quante più informazioni di recupero e di chiudere quanti più file possibile, in modo che l'hdd non ottenga collegamenti interrotti.
Esegui il debug e correggilo se riesci a riprodurlo spesso. Se non riesci a riprodurlo, basta unire le mani, inginocchiarsi e pregare come l'inferno di non vederlo "regolarmente".
SIGSEGV
gestore su qualcosa di diverso da SIG_DFL
(che è il dump del core ed esce per a SIGSEGV
) poiché se si accede alla memoria che non si dovrebbe fare, qualcosa è andato molto sbagliato e il recupero è probabilmente impossibile. (2) Un core verrà scaricato solo dopo che il processo è stato interrotto. (3) Il dump principale include solo la memoria e i registri del processo che è stato scaricato. (4) Altri processi, la CPU e il kernal non sono influenzati dalla segfault di un altro processo.