logo

Falla de segmentació Core Dumped Ubuntu

Què és un error de segmentació?

Falla de segmentació o infracció d'accés ( error de seg en resum) és una condició de fallada o una fallada produïda pel maquinari amb protecció de memòria, que alerta un sistema operatiu que el programari ha intentat per accedir a una àrea de memòria restringida (una violació d'accés a la memòria).

És una forma d'error de protecció general en sistemes x86 estàndard. En resposta, el nucli del sistema operatiu normalment implementarà unes quantes operacions correctives, generalment transmetent aquesta falla al procés ofensor mitjançant la transferència d'un senyal al procés.

En alguns casos, els processos poden instal·lar un controlador de senyal, permetent-los recuperar-se per si mateixos, però en cas contrari, s'utilitza el controlador de senyal predeterminat del sistema operatiu, que generalment condueix a la terminació anormal del procés i, de vegades, a un abocament de nucli.

  • Els errors de segmentació són una classe d'error bàsica en programes especificats en molts idiomes com ara C llenguatge que ofereix accés a la memòria de baix nivell i alguns per conèixer comprovacions de seguretat.
  • Principalment, sorgeixen a causa de molts errors en els punters utilitzats per a l'adreçament de memòria virtual, específicament l'accés il·legal.
  • Altres tipus d'error d'accés a la memòria són a error de bus , que també inclou diverses causes.
  • Aquests apareixen principalment a causa d'una adreça de memòria física inexacte o d'un accés desalineat a la memòria.
  • Aquestes són algunes referències de memòria que el maquinari no pot abordar en lloc de referències que el procés no pot abordar.
  • Diversos llenguatges de programació poden aplicar mecanismes creats per evitar errors de segmentació i desenvolupar la seguretat de la memòria. Per exemple, el Rovell El llenguatge de programació aplica un model basat en la propietat per garantir la seguretat de la memòria. Un altre idioma com Java i Lisp aplica la recollida d'escombraries, que ignora moltes classes d'error de memòria que poden provocar errors de segmentació.

Visió general de la falla de segmentació

  • Apareix un error de segmentació quan qualsevol programa intenta accedir a una ubicació de memòria a la qual no està permès accedir o intenta accedir a una ubicació de memòria d'una manera que no està permesa (per exemple, intentant escriure en una ubicació de només lectura o sobreescriure la part del sistema operatiu).
  • En informàtica, la paraula 'segmentació' té diversos usos. Pel que fa a la falla de segmentació, paraula utilitzada des de 1950, defineix l'espai d'adreces del programa, només l'espai d'adreces del programa és llegible amb protecció de memòria, i d'això, només la pila i la part de lectura-escriptura del segment de dades. del programa es pot escriure. Per tant, intentar llegir fora de l'espai d'adreces del programa o escriure a la part de només lectura de l'espai d'adreces es produeix un error de segmentació.
  • Apareix un error de segmentació si el maquinari troba un intent de referir-se a un segment inexistent, una ubicació externa als límits del segment o una ubicació amb un estil no permès pels permisos concedits per al segment als sistemes que utilitzen la segmentació de memòria de el maquinari per proporcionar memòria virtual.
  • En general, un error de pàgina no vàlid provoca un error de segmentació als sistemes que només utilitzen paginació. Els errors de pàgina i els errors de segmentació són tots dos errors derivats del sistema de gestió de memòria virtual. A més, es pot produir errors de segmentació independentment dels errors de pàgina; l'accés il·legítim a qualsevol pàgina vàlida és la culpa de la segmentació. L'error de segmentació pot aparèixer al centre d'una pàgina. Dins a desbordament del buffer que resideix en una pàgina però sobreescriu la memòria de manera il·legal, per exemple.
  • Inicialment, la falla prové MMU ( unitat de gestió de memòria ) sobre l'accés il·legal, com a segment del seu aspecte de protecció de memòria, o un error de pàgina no vàlid a nivell de maquinari. Si el problema no és una adreça lògica no vàlida sinó una adreça física no vàlida, més aviat sorgeix l'error de bus. Per tant, aquests no sempre es distingeixen.
  • Es troba aquesta falla i s'envia un senyal al procés infractor, activant el controlador del procés per a aquest senyal a nivell de sistema operatiu. Els diferents tipus de sistemes operatius tenen noms de senyal diferents per indicar que ha aparegut un error de segmentació.
  • Un senyal conegut com SIGSEGV (abreviatura de infracció de la segmentació ) es transfereix al procés ofensiu als sistemes operatius semblants a Unix. El procés infractor té una excepció, és a dir, STATUS_ACCESS_VIOLATION a Microsoft Windows.

Causes de la falla de segmentació

Les circumstàncies en què apareix un error de segmentació i com es manifesta són específiques del sistema operatiu i del maquinari. Diferents maquinari sorgeixen diferents errors per a diverses circumstàncies i diferents sistemes operatius els transformen en diferents senyals que s'envien als processos.

La causa propera pot ser una violació d'accés a la memòria, tot i que la causa subjacent és un error de programari d'alguns tipus. Depurar un error o decidir la causa arrel pot ser fàcil en alguns casos, en els quals el programa conduirà a un error de segmentació de manera coherent. Tanmateix, la bossa podria ser difícil de reproduir i dependre de l'assignació de memòria a cada execució en altres casos.

'abc' està en números'

Les següents són algunes de les causes típiques de l'error de segmentació:

  • Intent d'accedir a una adreça de memòria inexistent (externa a l'espai d'adreces del procés)
  • Intentar accedir a la memòria un programa no té drets (com ara estructures del nucli dins del context del procés)
  • S'està intentant escriure memòria de només lectura (com ara segment de codi )
  • Al seu torn, sovint es produeixen per molts errors de programació que tenen com a resultat un accés no vàlid a la memòria:
  • S'està intentant executar un programa que no es compila correctament. (Alguns compiladors donaran lloc a un fitxer executable independentment de l'existència d'errors en temps de compilació.)
  • Un desbordament de pila
  • Un desbordament del buffer
  • Assignació o anul·lació de referència a un punter alliberat (a punter penjant , que indica la memòria que s'ha suprimit/desassignat/alliberat)
  • Assignació o anul·lació de referència a un punter no inicialitzat (a punter salvatge , que indica una adreça de memòria aleatòria)
  • Desreferenciació a a punter nul generalment indica una adreça que no forma part de l'espai d'adreces del procés

Sovint apareixen errors de segmentació a causa dels errors en l'ús d'un punter, concretament en C assignació de memòria dinàmica en codi C. Desreferenciació a a punter nul , que resulta en un comportament indefinit, donarà lloc a un error de segmentació. Es deu a un punter nul que no pot ser una adreça de memòria vàlida. El punters penjants i punters salvatges indicar una memòria que podria o no existir i que podria o no ser escrivible o llegible i, per tant, pot produir errors transitoris.

Resoldre l'error de segmentació a Ubuntu

Aquest error pot afectar el nostre sistema Ubuntu en qualsevol moment. L'error de segmentació és quan el nostre sistema intenta accedir a qualsevol pàgina de memòria que no existeix. Nucli abocat defineix quan una part del codi intenta realitzar una operació d'escriptura i lectura en una ubicació lliure o de només lectura. En general, faltes de seg estan associats amb un fitxer anomenat core i es produeixen en el moment de l'actualització.

Mentre executem algunes ordres en el moment de la situació d'abocament del nucli, podríem trobar-nos amb el 'No es pot obrir el fitxer de bloqueig' error. Es deu al fet que el sistema intenta agafar una mica de bloc que no existeix. És a causa de la fallada dels binaris d'alguns programes específics.

fórmula de paleta

És possible que estem depurant o retrocedint per resoldre'l, però la solució és arreglar els paquets trencats implementant alguns passos que s'esmenten a continuació:

1. Elimineu els fitxers de bloqueig disponibles en diferents ubicacions.

 $ sudo rm -rvf /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock and restart our system 

Nucli de fallada de segmentació d'Ubuntu

2. Eliminació de la memòria cau del dipòsit.

 $ sudo apt-get clean all 

Falla de segmentació Core Dumped Ubuntu

3. Actualitzeu i actualitzeu la nostra memòria cau del dipòsit.

 $ sudo apt-get update 

Falla de segmentació Core Dumped Ubuntu
 $ sudo apt-get upgrade 

Falla de segmentació Core Dumped Ubuntu

4. Ara actualitzeu la nostra distribució actualitzarà els nostres paquets.

ordenació de tuples python
 $ sudo apt-get dist-upgrade 

Falla de segmentació Core Dumped Ubuntu

5. Cerqueu els paquets trencats i traieu-los amb força.

 $ sudo dpkg -1 | grep ^..r | apt-get purge 

Una bona manera que sempre funcionarà és la següent, a part de la línia d'ordres:

Python imprimeix amb 2 decimals
  1. En mode d'inici, executeu Ubuntu fent clic a Esc clau després del reinici.
  2. Tria ' Opcions avançades per a Ubuntu
    Falla de segmentació Core Dumped Ubuntu
  3. En mode de recuperació executeu Ubuntu i serem esmentats diverses opcions.
  4. En primer lloc, tria el 'Reparar paquets trencats'
    Falla de segmentació Core Dumped Ubuntu
  5. A continuació, trieu el 'Reprèn l'arrencada normal'
    Falla de segmentació Core Dumped Ubuntu

Ara, tenim dues maneres de resoldre errors de segmentació GUI i CLI. De vegades, també pot passar que l'ordre, és a dir, apt no funcioni a causa de error de seg , de manera que el mètode CLI no s'implementarà. En aquesta situació, no us preocupeu perquè el mètode GUI sempre funcionarà per a nosaltres.

Tractament d'errors de segmentació

La tasca predeterminada per a un error de bus o d'error de segmentació és la finalització anormal d'un procés que l'ha trobat. Es pot produir un fitxer bàsic per ajudar a la depuració i també es podrien implementar altres tasques dependents de la plataforma. Per exemple, molts sistemes Linux que apliquen el pegat de seguretat podria registrar-se Senyals SIGSEGV per controlar possibles intents d'intrusió amb desbordaments de memòria intermèdia.

En alguns sistemes, com Windows i Linux, és possible que un programa gestioni un error de segmentació. El programa en execució no només pot gestionar l'esdeveniment, sinó que pot extreure alguns detalls sobre el seu estat, com ara els valors del registre del processador, obtenir un rastre de pila, la línia d'un codi font quan es va trobar, l'adreça de memòria a la qual es va accedir de manera no vàlida i si la tasca era una escriptura o una lectura segons el sistema operatiu i l'arquitectura.

Tanmateix, un error de segmentació defineix que un programa té un error que requereix correcció, també és possible provocar aquest error intencionadament amb finalitats de prova, depuració i també per imitar plataformes en què es requereix accés directe a la memòria. El sistema hauria de poder permetre que el programa s'executi fins i tot després que es produeixi l'error en aquest darrer cas.

En aquesta situació, quan el sistema ho permet, és possible gestionar l'esdeveniment i millorar el comptador del programa del processador 'saltar' sobre la instrucció fallida per continuar amb l'execució.

què és svn checkout

Exemples de falla de segmentació

Falla de segmentació Core Dumped Ubuntu

Escriptura a la memòria de només lectura

Es produeix una falla de segmentació. Apareix quan el programa escriu a una part del seu segment de codi o a la part de només lectura del segment de dades als nivells d'error del codi perquè es carreguen a través del sistema operatiu a la memòria de només lectura.

Desreferència del punter nul

En C i altres llenguatges semblants a C, els punters nuls s'utilitzen per al significat 'punter a cap objecte' i com a indicador d'error i desreferenciació en el punter nul (una escriptura o lectura d'un punter nul) és un error de programa molt bàsic.

L'estàndard no diu que el punter nul sigui similar al punter a l'adreça de memòria 0, tot i que aquest podria ser el cas. Gairebé tots els sistemes operatius mapegen l'adreça del punter nul de manera que el seu ús condueixi a un error de segmentació.

Aquest comportament no està garantit per cap estàndard C. En C, desreferenciar el punter nul és el comportament indefinit , i es permet una implementació conforme per suposar que un punter que no es fa referència no és nul.

Desbordament del buffer

Desbordament de pila