Red de conocimiento informático - Material del sitio web - Cómo ver archivos principales

Cómo ver archivos principales

En los sistemas Unix, cuando una aplicación falla, generalmente se genera un archivo principal. Es muy importante encontrar el problema en función del archivo principal y realizar el análisis y la depuración correspondientes. Este artículo lo presenta brevemente.

Por ejemplo, se produce un error cuando se ejecuta el programa cmm_test_tool y el archivo principal generado es el siguiente:

-rw-r -r- 1 root cmm_test_tool.c

-rw- r -r- 1 raíz

cmm_test_tool.o

-rwxr-xr-x 1 raíz cmm_test_tool

-rw- -- 1 raíz

núcleo.19344

-rw--- 1 raíz núcleo.19351

-rw-r- 1 raíz

cmm_ test_tool.cfg

-rw-r- 1 raíz cmm_test_tool.res

-rw-r- 1 raíz

cmm_ test_tool.log

[root@ AUTOTEST_SIM2 mam2cm]#

Luego puede usar el comando gdb para encontrarlo, el parámetro uno es el nombre de la aplicación, el parámetro dos es el archivo principal y luego ejecutar

gdb

cmm_test_tool core.19344 Los resultados son los siguientes:

[root@AUTOTEST_SIM2 mam2cm]# gdb cmm_test_tool core.19344

GNU gdb Red Hat

Linux (5.2 .1-4)

Copyright 2002 Free Software Foundation, Inc.

GDB es gratuito

software, protegido por la Licencia Pública General GNU, de nada

Bajo ciertas condiciones

Cámbielo y/o distribuya copias del mismo. Ingrese

"mostrar garantía" para obtener más detalles.

Este GDB está configurado como

"i386-redhat-linux"...

El kernel es generado por `./cmm_test_tool ".

Programa

terminado con la señal 11, Fallo de segmentación.

Lectura de símbolos de

/lib/i686/libpthread.so.0 ...hecho.

Símbolos cargados para

/lib/i686/libpthread.so.0

Lectura de símbolos de

/ lib/i686/libm.so.6...done.

Símbolos cargados para /lib/i686/libm.so.6

Lectura de

símbolos de /usr/lib/libz.so.1...done.

Símbolos cargados para

/usr/lib/libz.so.1

Leyendo símbolos de

/usr/lib/libstdc++.so.5...done. Cargado los símbolos de

/usr/lib/libstdc++.so.5

.

Leyendo símbolos de

/lib/i686/libc.so.6...done.

Símbolos cargados de /lib/i686/libc.so.6

Símbolos cargados para

/libgcc_s .so.1.done lib/libgcc_s.so.1

Lectura de símbolos de /lib/ld-linux.so. 2...listo.

Símbolos

cargados para /lib/ld-linux.so.2

Leyendo símbolos de /lib/ld-linux. so.2...done.

Leyendo símbolos de

/lib/libnss_files.so.2...done.

Símbolos cargados para /lib /libnss_files.so.2

#0

p>

0 ×4202cec1 en __strtoul_internal () de

/lib/i686/libc.so .6

(gdb)

Vaya al indicador de gdb y escriba dónde encontrar la ubicación y la pila donde ocurrió el error, de la siguiente manera:

(gdb) donde

#0 0×4202cec1 en __strtoul_internal () de

/lib/i686/libc.so.6

#1 0×4202d4e7 en strtoul ( ), de

/lib/i686/libc.so.6

p>

#2 0×0804b4da en GetMaxIDFromDB (get_type=2,

max_id= 0×806fd20) en cmm_test_tool.c:788

#3 0×0804b9d7 en ConstrctVODProgram

(vod_program=0×40345bdc) en cmm_test_tool.

#4 0×08

04a2f4 en

TVRequestThread (arg=0×0) en cmm_ test_tool.c:372

#5 0×40021941 en

pthread_start_thread () de /lib /i686/libpthread.so.0

(gdb)

En este punto, se puede ver que la ubicación del error del archivo es la función GetMaxIDFromDB

, y los dos parámetros son 2 y 0×806fd20, esta función se encuentra en la línea 788 del código fuente, en base a esto, podemos encontrar la causa raíz del problema y solucionarlo.