Skip to content
🚀 20% OFF for new customers on Linux and Windows servers! Code: ILK20  |  Order Now →
build Solución de Problemas y Automatización

Error de Segmentación y Análisis de Core Dump

El error de segmentación (segfault) ocurre debido a una violación de acceso a memoria. En este artículo, explicamos paso a paso las causas del segfault, cómo generar un core dump y analizarlo con gdb. Información crítica para administradores de servidores.

person
Editör
(Actualizado: 10 sep 2026) schedule 3 min de lectura visibility 12 visitas

¿Qué es un Error de Segmentación?

Un error de segmentación (segfault) ocurre cuando un programa intenta acceder a una región de memoria no permitida, lo que provoca que el sistema operativo lo termine. Este error es común en lenguajes de bajo nivel como C y C++. Los servidores web, sistemas de bases de datos o módulos personalizados pueden experimentar este error. Por ejemplo, acceder a un puntero nulo en un módulo de Apache puede provocar un segfault.

Causas Comunes del Segfault

  • Desreferencia de puntero nulo: Si un puntero es NULL y se intenta acceder al valor al que apunta, se produce un segfault.
  • Desbordamiento de búfer: Escribir fuera de los límites de un array puede dañar regiones de memoria adyacentes.
  • Uso después de liberar: Usar un puntero después de liberar la memoria.
  • Desbordamiento de pila: Llamadas recursivas muy profundas pueden desbordar la pila.

En un entorno de servidor, un segfault provoca una interrupción del servicio. Por lo tanto, es necesario realizar un análisis de core dump para detectar y corregir el error.

¿Qué es un Core Dump y Cómo Habilitarlo?

Un core dump es una copia del contenido de la memoria de un programa en el momento de su fallo, guardada en un archivo. Se utiliza para entender la causa del error. En Linux, el tamaño del core dump se configura con ulimit -c. Para hacerlo ilimitado:

ulimit -c unlimited

Para hacerlo permanente, se puede agregar * soft core unlimited al archivo /etc/security/limits.conf. Además, la ubicación de los archivos core dump se define en /proc/sys/kernel/core_pattern. Por ejemplo, echo '/var/crash/core.%e.%p' > /proc/sys/kernel/core_pattern hace que el nombre del archivo incluya el nombre del programa y el PID.

Análisis de Core Dump: Paso a Paso

1. Encuentre el Archivo Core y Examínelo

Por defecto, el core dump se crea en el directorio de trabajo con el nombre core. Para encontrarlo, use find / -name core* 2>/dev/null. Tenga en cuenta que pueden ser archivos grandes, así que vigile el espacio en disco.

2. Ábralo con GDB

GDB (GNU Debugger) abre el archivo core junto con el programa:

gdb /usr/local/bin/programa /ruta/al/core

Dentro de GDB, use el comando bt (backtrace) para ver la pila de llamadas. Ejemplo de salida:

(gdb) bt #0 0x00007f... in strcpy () at /lib/libc.so.6 #1 0x000055... in main (argc=1, argv=...) at test.c:10

Esto indica que el error ocurrió en la línea 10 de la función main, en una llamada a strcpy.

3. Examine las Variables

Use frame 1 para ir al marco anterior y luego imprima variables: print var o info locals. Por ejemplo, para ver qué puntero es nulo, use print ptr.

Ejemplo: Segfault por Puntero Nulo

Considere un programa en C:

#include int main() { int *p = NULL; *p = 5; return 0; }

Al compilar y ejecutar, se produce un segfault. Si se ha generado un core dump, al abrirlo con gdb y ejecutar bt, vemos que intentamos escribir en la dirección 0x0 dentro de main. print p confirma que p = 0x0. La solución: hacer que p apunte a una dirección válida.

Herramientas Avanzadas de Análisis

Además de GDB, puede usar strace para rastrear llamadas al sistema. Valgrind es ideal para encontrar errores de memoria (por ejemplo, memoria no inicializada). En entornos de servidor, systemd-coredump permite gestionar los core dumps de forma centralizada.

Conclusión

Aunque los errores de segmentación son molestos, el análisis de core dump permite encontrar fácilmente la causa del problema. En HostingServer.com.tr recomendamos configurar los core dumps y usar gdb cuando encuentre este tipo de errores en sus servidores. Recuerde: un análisis adecuado significa una solución más rápida.

Comparte este artículo

Artículos relacionados