Ubicación del problema de Linux

1. Principio de funcionamiento de la CPU

 

 

 2. Asignación de memoria de Linux

 

 

 3. pila

1) El lugar donde se almacenan las variables locales, los parámetros de función y los valores de retorno de la función.
2) El espacio de pila de cada hilo es continuo e independiente entre sí.
3) Utilice x /100a $esp para ver el datos originales en la memoria de la pila

 3. Proceso de llamada a función

Cómo el proceso de llamada a función organiza los datos en la pila

 4. Gestión del montón de tres niveles

Si desea obtener más información al respecto, lea "análisis del código fuente ptmalloc de administración de memoria glibc.pdf" y código fuente de heapdump.

 5. Recopilación de información

Espacio de pila de información de subprocesos Todas las variables globales y locales del montón Toda la información almacenada en el núcleo se puede extraer mediante los métodos anteriores

5.1 Ver información de la memoria

X /100x dirección

5.2 Ver pila de llamadas X /100a $esp

5.3 Ver variables locales

Información local

 

5.4 Ver variables globales

P nombre de variable global

5.5 Ver instancia de clase

Símbolo de información * dirección de instancia de clase

P * (nombre de clase *) dirección de instancia de clase

 5.6 Ver contenedor STL

Plist pmap...

 5.7 Ver la asignación de memoria del montón:

 Volcado de montón –a 

6. Ejemplo de solución de problemas

El proceso de resolución de problemas es el proceso de analizar e integrar información. El proceso de resolución de problemas es el proceso de utilizar de manera integral los diversos métodos introducidos en el Capítulo 2 para recopilar información, profundizar en la raíz del problema paso a paso y eliminar los capullos. Necesidad de intentar, formular hipótesis y verificar constantemente. Es un tipo de trabajo mental avanzado, que requiere mucha paciencia y familiaridad con la estructura del código original. A veces se necesitan varios meses de demostraciones y verificaciones repetidas para localizar un problema profundamente arraigado.

¿El programa falla ocasionalmente? ¿Qué sigue?

6.1 Observe las pistas de los siguientes archivos principales

1) El tamaño del núcleo es de aproximadamente 200 M, lo que indica que el bloqueo no se debe a pérdidas de memoria.

2) El número de proceso es 5030 y el registro se puede asociar con el número de proceso.

3) Error tipo 11 Fallo de segmentación. La descripción es una excepción de acceso a la memoria.

6.2 Preparación del entorno Utilice gdb para abrir el archivo principal

 1) Instale el kit de herramientas dss7016_tools.tar.gz para asegurarse de que gdb (7.6) heapdump esté en su lugar

2) Utilice gdb UMTS.exe ../UMTS_5030-1437863062-11.core -x .gdbinit para abrir el archivo principal y garantizar que el contenedor stl se pueda analizar correctamente

3) Utilice la biblioteca compartida de información para comprobar si la biblioteca está cargada correctamente

 6.3 Confirmar la causa superficial del accidente

1) bt falla en el constructor CZString::CZString

 2) Desarmar para ver dónde ocurrió el accidente.

3) registros de información para ver el valor del registro

 4) La razón superficial confirma que el valor de Mov edx,[eax +0x4] eax es incorrecto, lo que genera un error

 6.4 Por qué el valor de Eax no revierte la primera pila de optimización difícil

 

1) El valor del parámetro __x es incorrecto ¿por qué?

Ver stl_map.h y stl_tree.h

 2) Encuentra el valor de __X

 3) Ahora se puede confirmar que el valor en este mapa es incorrecto

4) ¿Por qué el valor en el mapa es incorrecto? No existe un proceso de verificación de rutina para puntos súper difíciles.

 

 

  

 5) La causa raíz es que la clase CLiveChannel se liberó y el bloqueo interno fue manipulado, lo que resultó en la destrucción de la estructura del mapa del subproceso 1, lo que resultó en una falla de segmentación.

Supongo que te gusta

Origin blog.csdn.net/huapeng_guo/article/details/132494333
Recomendado
Clasificación