GNU/Linux >> Tutoriales Linux >  >> Linux

La forma más fácil de localizar una falla de segmentación

+1 por la respuesta de Tibor.

En programas más grandes o si usa bibliotecas adicionales, también puede ser útil mirar el backtrace con gdb:ftp://ftp.gnu.org/pub/old-gnu/Manuals/gdb/html_node/gdb_42.html


Use un depurador, como gdb o si esto no es aplicable un strace herramienta para obtener una mejor idea de dónde ocurre la falla de segmento.

Si usa gcc , asegúrese de compilar con -g cambiar para incluir información de depuración. Entonces, gdb le mostrará la ubicación exacta en un código fuente donde falla.

Por ejemplo, si tenemos este programa obviamente defectuoso:

nuevo.c

#include <stdio.h>

int main()
{
        int *i = 0x478734;
        printf("%d", *i);
}

Lo compilamos con gcc -g new.c -o new y luego ejecute el gdb sesión con gdb new :

Emitimos el run comando en la sesión interactiva y el resto está claro:

(gdb) run
Starting program: /home/Tibor/so/new
[New Thread 9596.0x16a0]
[New Thread 9596.0x1de4]

Program received signal SIGSEGV, Segmentation fault.
0x0040118a in main () at new.c:6
6               printf("%d", *i);
(gdb)

Como han señalado DasMoeh y netcoder, cuando se produce un error de segmento, puede utilizar el backtrace comando en la sesión interactiva para imprimir una pila de llamadas. Esto puede ayudar a identificar aún más la ubicación de una falla de segmento.


La forma más fácil es usar valgrind . Indicará la ubicación donde se produce el acceso no válido (y otros problemas que no causaron el bloqueo pero que aún no eran válidos). Por supuesto, el problema real podría estar en otra parte del código (p. ej., un puntero no válido), por lo que el siguiente paso es comprobar el código fuente y, si sigue confundido, utilizar un depurador.


Linux
  1. Cómo instalar Zoom en Ubuntu (la forma más fácil)

  2. Instale Zabbix en Ubuntu 18.04:¡la forma más fácil y rápida!

  3. ¿Hay alguna forma de cambiar las variables de entorno de otro proceso en Unix?

  4. ¿Por qué fclose (NULL) de glibc causa una falla de segmentación en lugar de devolver un error?

  5. Error de segmentación cuando Qt QApplication se creó con new

Cómo editar archivos PDF en Linux de la manera más fácil posible

Portainer:la forma más fácil de administrar Docker

La forma más rápida de contar archivos recursivamente en Linux

Instale Postman Ubuntu 18.04:¡La forma más fácil!

¿Cuál es la forma más fácil de liberar espacio en un disco duro?

¿Cuál es la forma más fácil de visualizar datos de stdout como un gráfico?