tutorial how debugger c debugging gdb

c - how - gdb tutorial



Cómo cargar varios archivos de símbolos en gdb (4)

Además de la respuesta del alk y sus comentarios, la dirección solicitada es la dirección de la sección .text . Puedes encontrarlo usando el comando readelf

Aquí tiene un ejemplo de un uso de readelf para archivos binarios. readelf dirección donde se ha cargado el nombre de archivo [GDB]

Cómo cargar varios archivos de símbolos en gdb . Tengo un ejecutable foo.out y cargando un módulo bar.so. He creado dos archivos de símbolos foo.symbol y bar.symbol. Cómo cargar ambos archivos en gdb.

# gdb --core core # (gdb) # (gdb) symbol-file foo.symbol

Cómo cargar el segundo archivo de símbolos. O hay alguna forma de cargar todos los archivos de directorio en gdb


En lugar de intentar cargar los símbolos manualmente en la ubicación correcta, me parece más conveniente fusionar los símbolos con los ejecutables eliminados con eu-unstrip y luego reproducir el bloqueo con los símbolos ya presentes.

Este enfoque no depende de los archivos de símbolos que coincidan con el esquema de denominación requerido por los mecanismos de resolución de ruta ( enlace de depuración e id de compilación ) que se utilizan al configurar el debug-file-directory .


Para configurar el directorio que contiene el uso del archivo de símbolos

set debug-file-directory <directory>

y use

show debug-file-directory

para mostrar lo que actualmente está configurado como directorio que contiene archivos de símbolos.

Los archivos de símbolos se leen automáticamente en este directorio si su nombre (sin ruta) es proporcionado por el binario en términos de un enlace de depuración.

Para agregar símbolos adicionales, puede usar add-symbol-file .

(ya que los gdb onlinedocs parecen no estar disponibles en este momento, cito esto aquí)

dirección de nombre de archivo de añadir-símbolo-archivo

agregar-símbolo-archivo nombre de archivo dirección [-reconocimiento] [-mapped]

agregar-símbolo-archivo nombre de archivo-dirección de sección ...

El comando add-symbol-file lee información adicional de la tabla de símbolos del nombre de archivo del archivo. Utilizaría este comando cuando el nombre de archivo se haya cargado dinámicamente (por algún otro medio) en el programa que se está ejecutando. la dirección debe ser la dirección de memoria en la que se ha cargado el archivo; gdb no puede resolver esto por sí mismo. También puede especificar un número arbitrario de pares `-sección de dirección '', para dar un nombre de sección explícito y una dirección base para esa sección. Puede especificar cualquier dirección como una expresión.

La tabla de símbolos del nombre de archivo del archivo se agrega a la tabla de símbolos que se leyó originalmente con el comando archivo de símbolos. Puedes usar el comando agregar-símbolo-archivo cualquier cantidad de veces; Los nuevos datos de símbolos así leídos siguen agregando a los antiguos. Para descartar todos los datos de símbolos antiguos, use el comando de archivo de símbolos sin ningún argumento.

Si bien el nombre de archivo suele ser un archivo de biblioteca compartida, un archivo ejecutable u otro archivo objeto que se ha reubicado completamente para cargarlo en un proceso, también puede cargar información simbólica desde archivos .o reubicables, siempre y cuando:

  • la información simbólica del archivo se refiere solo a los símbolos de enlace definidos en ese archivo, no a los símbolos definidos por otros archivos de objetos,
  • cada sección a la que se refiere la información simbólica del archivo se ha cargado en la parte inferior, tal como aparece en el archivo, y
  • puede determinar la dirección en la que se cargó cada sección y proporcionarlas al comando add-symbol-file.

Algunos sistemas operativos integrados, como Sun Chorus y VxWorks, pueden cargar archivos reubicables en un programa que ya se está ejecutando; tales sistemas típicamente hacen que los requisitos anteriores sean fáciles de cumplir. Sin embargo, es importante reconocer que muchos sistemas nativos utilizan procedimientos de enlace complejos (factorización de la sección .linkonce y ensamblaje de la tabla del constructor de C ++, por ejemplo) que hacen que los requisitos sean difíciles de cumplir. En general, no se puede suponer que el uso de agregar archivo de símbolos para leer la información simbólica de un archivo de objeto reubicable tendrá el mismo efecto que vincular el archivo de objeto reubicable en el programa de la manera normal.

El archivo de símbolo de adición no se repite si presiona después de usarlo.

Puede usar las -mapped'' and -readnow'' al igual que con el comando de archivo de símbolos, para cambiar la forma en que gdb administra la información de la tabla de símbolos para el nombre de archivo.