Sunday, November 27, 2016

Opciones Binarias De Impresión De Gdb Print

Cómo utilizar gcc, g, y gdb El compilador C en eniac es gcc. Su contraparte C es g. Para compilar un programa C o C: gcc file. c o g file. c Esto compila file. c en un binario ejecutable llamado a. out. Aquí hay algunas opciones para gcc y g: - o outputfile Para especificar el nombre del archivo de salida. El ejecutable se llamará a. out a menos que utilice esta opción. - g Para compilar con banderas de depuración, para utilizar con gdb. - L dir Para especificar directorios para que el vinculador busque los archivos de biblioteca. - l biblioteca Especifica una biblioteca con la que vincular. - I dir Especifica los directorios para la compilación a buscar cuando se buscan archivos de inclusión. El depurador es gdb. Aquí hay un ejemplo típico de una sesión de gcc / gdb: Aquí hay algunos comandos de gdb: help Te ayudará en la mayoría de las funciones de gdb. Si desea obtener ayuda sobre un comando específico, escriba help command. B nombre-función Para establecer un punto de interrupción en una función. R args Para ejecutar el programa. Funcionará hasta que alcance un punto de interrupción. S A un solo paso a través de líneas de código. C Para continuar hasta el siguiente punto de interrupción. P variable Para imprimir un valor de variables. Q Para salir de gdb. Copiar Informática y Tecnología Educativa Servicios Informar un ProblemaAlguna ayuda genérica: gdb inicio GDB, sin depuración les gdb programa comienza depuración programa gdb programa núcleo depuración coredump núcleo producido por programa gdb --help describe opciones de línea de comando 1- Primero encuentre el directorio Donde se genera el archivo núcleo. 2- Luego use el comando ls - ltr en el directorio para encontrar el último corefile generado. 3- Para cargar el archivo de núcleo use gdb ruta binaria de corefile Esto cargará el corefile. 4- Entonces puede obtener la información usando el comando bt. Para el uso detallado del backtrace bt lleno. 5- Para imprimir las variables use print varibale-name o p varibale-name 6- Para obtener cualquier ayuda en gdb utilice la opción de ayuda o use apropos search-topic 7- Utilice frame-number para ir al número de marco deseado. 8- Utilice los comandos n de arriba y de abajo n para seleccionar los marcos de trama n hacia arriba y seleccione trama n tramas hacia abajo respectivamente. 9- Para detener gdb use quit o q. GNU GDB Debugger Comando Cheat Sheet Compile con la opción - g (para la mayoría de los compiladores de GNU e Intel) que genera información adicional en el código de objeto para que el depurador pueda coincidir con una línea de código fuente con el Paso de ejecución. No utilice la directiva de optimización del compilador como - O u - O2 que reorganizan las operaciones de cálculo para aumentar la velocidad ya que este reordenamiento no coincide con el orden de ejecución en el código fuente y puede ser imposible de seguir. Controlc: Detener la ejecución. Se puede detener el programa en cualquier lugar, en su fuente o una biblioteca C o en cualquier lugar. Para ejecutar un comando de shell: comando o comando de shell Comando de GDB: Use TAB key info bre TAB completará el comando resultando en puntos de interrupción de información Presione TAB dos veces para ver todas las opciones disponibles si hay más de una opción disponible o escriba M-RETURN. De-Referencing STL Containers: La visualización de las clases de contenedores STL usando el nombre de variable de GDB p da como resultado una visualización críptica de definiciones de plantilla y punteros. Utilice los siguientes /. Archivo gdbinit (V1.03 09/15/08). Ahora funciona con GDB 4.3. (Versiones archivadas: V1.01 GDB 6.4 solamente) Gracias al Dr. Eng. Dan C. Marinescu por el permiso para publicar este guión. Utilice los comandos siguientes proporcionados por el script: 18.1 Comandos para especificar archivos Puede que desee especificar los nombres de archivos de volcado ejecutables y de núcleo. La forma habitual de hacerlo es a la hora de arrancar, utilizando los argumentos de los comandos de arranque de gdb s (consulte Introducción y salida de gdb). De vez en cuando es necesario cambiar a un archivo diferente durante una sesión de gdb. O puede ejecutar gdb y olvidar especificar un archivo que desea utilizar. O está depurando un destino remoto a través de gdbserver (consulte el archivo). En estas situaciones, los comandos gdb para especificar nuevos archivos son útiles. File filename Utiliza filename como el programa que se va a depurar. Se lee por sus símbolos y por los contenidos de la memoria pura. También es el programa ejecutado cuando se utiliza el comando run. Si no especifica un directorio y el archivo no se encuentra en el directorio de trabajo de gdb, gdb utiliza la variable de entorno PATH como una lista de directorios para buscar, tal como lo hace el shell al buscar un programa para ejecutarse. Puede cambiar el valor de esta variable, tanto para gdb como para su programa, utilizando el comando path. Puede cargar archivos objeto. o desvinculados en gdb utilizando el comando file. No será capaz de ldquorunrdquo un archivo de objeto, pero puede desmontar funciones e inspeccionar variables. Además, si la funcionalidad subyacente de BFD lo admite, puede usar gdb - write para remendar archivos de objeto utilizando esta técnica. Tenga en cuenta que gdb no puede interpretar ni modificar las reubicaciones en este caso, por lo que las ramas y algunas variables inicializadas parecerán ir al lugar equivocado. Pero esta característica sigue siendo práctica de vez en cuando. File file sin argumento hace que gdb descarte cualquier información que tenga tanto en el archivo ejecutable como en la tabla de símbolos. Exec-file nombreDeArchivo Especifica que el programa que se va a ejecutar (pero no la tabla de símbolos) se encuentra en el nombre de archivo. Gdb busca la variable de entorno PATH si es necesario para localizar el programa. Omitir nombre de archivo significa descartar información del archivo ejecutable. Symbol-file nombre_de_archivo Lea la información de la tabla de símbolos del nombre de archivo. PATH se busca cuando es necesario. Utilice el comando file para obtener la tabla de símbolos y el programa para ejecutar desde el mismo archivo. El archivo de símbolos sin argumento borra la información de gdb en la tabla de símbolos de los programas. El comando symbol-file hace que gdb olvide el contenido de algunos puntos de interrupción y expresiones de visualización automática. Esto es debido a que pueden contener punteros a los símbolos de registro de datos internos y tipos de datos, que forman parte de los datos de tabla de símbolos antiguos que se descartan dentro de gdb. Símbolo-archivo no se repite si presiona ltRETgt de nuevo después de ejecutarlo una vez. Cuando gdb está configurado para un entorno particular, entiende la información de depuración en cualquier formato que sea el estándar generado para ese entorno, puede utilizar un compilador gnu u otros compiladores que se adhieran a las convenciones locales. Los mejores resultados se obtienen generalmente de los compiladores gnu por ejemplo, utilizando gcc puede generar información de depuración para el código optimizado. Para la mayoría de los tipos de archivos de objeto, con la excepción de los antiguos sistemas SVR3 que utilizan COFF, el comando symbol-file normalmente no lee la tabla de símbolos en su totalidad de inmediato. En su lugar, examina la tabla de símbolos rápidamente para encontrar qué archivos de origen y qué símbolos están presentes. Los detalles se leen más tarde, un archivo de origen a la vez, según se necesiten. El propósito de esta estrategia de lectura en dos etapas es hacer que gdb arranque más rápido. En su mayor parte, es invisible excepto pausas ocasionales mientras se están leyendo los detalles de la tabla de símbolos para un archivo de origen particular. (El comando set verbose puede activar estas pausas en mensajes, si lo desea. Véase Advertencias y mensajes opcionales.) No hemos implementado todavía la estrategia de dos etapas para el COFF. Cuando la tabla de símbolos se almacena en formato COFF, el archivo de símbolos lee los datos de la tabla de símbolos en su totalidad de inmediato. Tenga en cuenta que ldquostabs-en-COFFrdquo todavía hace la estrategia de dos etapas, ya que la información de depuración es en realidad en formato de puñaladas. Symbol-file - readnow nombre de archivo - readnow nombre de archivo Puede reemplazar la estrategia de dos etapas de gdb para leer tablas de símbolos mediante la opción lsquo - readnow rsquo con cualquiera de los comandos que cargan información de tabla de símbolos si desea asegurarse de que gdb ha Toda la tabla de símbolos disponible. Core-file filename core Especifique el paradero de un archivo de volcado de núcleo que se utilizará como ldquocontents de memoryrdquo. Tradicionalmente, los archivos principales contienen sólo algunas partes del espacio de direcciones del proceso que las generó. Gdb puede acceder al archivo ejecutable mismo para otras partes. Core-file sin argumento especifica que no se va a utilizar ningún archivo de núcleo. Tenga en cuenta que el archivo de núcleo se ignora cuando su programa se ejecuta realmente bajo gdb. Por lo tanto, si ha estado ejecutando su programa y desea depurar un archivo principal en su lugar, debe eliminar el subproceso en el que se ejecuta el programa. Para ello, utilice el comando kill (véase Matar al proceso hijo). Add-symbol-file nombre de archivo dirección add-symbol-file nombre de archivo address - readnow add-symbol-file nombre de archivo dirección - s dirección de sección. El comando add-symbol-file lee información adicional de la tabla de símbolos del archivo nombre de 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 dar la dirección de memoria en la que se ha cargado el archivo gdb no puede averiguar esto por sí mismo. También puede especificar un número arbitrario de pares de rsquo de direcciones de sección lsquo - s, 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 archivo filename se agrega a la tabla de símbolos que se leía originalmente con el comando symbol-file. Puede utilizar el comando add-symbol-file cualquier número de veces que los nuevos datos de símbolo así leídos se mantengan además del antiguo. Los cambios se pueden revertir con el comando remove-symbol-file. Aunque el nombre de archivo es típicamente un archivo de biblioteca compartida, un archivo ejecutable o algún otro archivo de objeto que se ha reubicado completamente para cargar en un proceso, también puede cargar información simbólica de archivos. o reubicables, siempre y cuando: Sólo a los símbolos de vinculación definidos en ese archivo, no a los símbolos definidos por otros archivos de objeto, cada sección a la que se refiere la información simbólica de los archivos se ha cargado realmente en el inferior, como aparece en el archivo, y puede determinar la dirección en la que cada Se ha cargado, y proporcionar estos al comando add-symbol-file. Algunos sistemas operativos embebidos, como Sun Chorus y VxWorks, pueden cargar archivos reubicables en un programa ya en ejecución, tales sistemas típicamente hacen que los requisitos arriba mencionados sean fáciles de cumplir. Sin embargo, es importante reconocer que muchos sistemas nativos usan procedimientos de enlace complejos (por ejemplo, factoring de sección de enlace y montaje de tabla de constructor C) que hacen que los requisitos sean difíciles de cumplir. En general, no se puede suponer que el uso de add-symbol-file para leer un objeto reubicable archivos de información simbólica tendrá el mismo efecto que la vinculación del archivo de objeto reubicable en el programa de la manera normal. Add-symbol-file no se repite si pulsa ltRETgt después de usarlo. Remove-symbol-file nombre de archivo remove-symbol-file - a address Elimina un archivo de símbolo añadido mediante el comando add-symbol-file. El archivo a eliminar se puede identificar por su nombre de archivo o por una dirección que se encuentra dentro de los límites de este archivo de símbolos en la memoria. Ejemplo: remove-symbol-file no se repite si pulsa ltRETgt después de usarlo. Add-symbol-file-from-memory address Cargar símbolos de la dirección dada en un archivo de objetos cargado dinámicamente cuya imagen se asigna directamente a la memoria inferior. Por ejemplo, el kernel de Linux asigna un DSO de syscall en cada espacio de direcciones de procesos, este DSO proporciona código específico del kernel para algunas llamadas del sistema. El argumento puede ser cualquier expresión cuya evaluación genere la dirección del encabezado del archivo de objeto compartido de los archivos. Para que este comando funcione, debe haber utilizado los comandos de archivo de símbolos o de archivo de ejecución de antemano. Section section addr El comando section cambia la dirección base de la sección named del archivo exec a addr. Esto se puede usar si el archivo exec no contiene direcciones de sección (como en el formato a. out) o cuando las direcciones especificadas en el archivo en sí están equivocadas. Cada sección debe cambiarse por separado. El comando info files, descrito a continuación, enumera todas las secciones y sus direcciones. Info files info archivos de información de destino y destino de información también imprimen el destino actual (véase Especificación de un destino de depuración), incluidos los nombres de los archivos ejecutable y de volcado de núcleo que actualmente está utilizando gdb. Y los archivos de los cuales se cargaron los símbolos. El objetivo de ayuda de comandos enumera todos los posibles objetivos en lugar de los actuales. Secciones de información de maint Otro comando que puede darle información adicional sobre las secciones del programa es secciones de información de maint. Además de la información de la sección mostrada por los archivos de información. Este comando muestra las banderas y el desplazamiento de archivo de cada sección en los archivos ejecutable y de volcado de núcleo. Además, las secciones info maint proporcionan las siguientes opciones de comando (que pueden combinarse arbitrariamente): ALLOBJ Mostrar secciones para todos los archivos de objetos cargados, incluidas las bibliotecas compartidas. Secciones Mostrar información sólo para secciones con nombre. Section-flags Mostrar información sólo para las secciones para las cuales los flags de sección son true. Las banderas de sección que gdb conoce actualmente son: La sección ALLOC tendrá espacio asignado en el proceso cuando esté cargado. Establecido para todas las secciones, excepto las que contienen información de depuración. LOAD Sección se cargará desde el archivo en la memoria de proceso hijo. Establecido para códigos y datos preinicializados, desactive las secciones. bss. La sección RELOC debe ser reubicada antes de cargarla. READONLY La sección no puede ser modificada por el proceso secundario. La sección CODE contiene sólo código ejecutable. DATA Sección contiene sólo datos (no código ejecutable). La sección ROM residirá en ROM. CONSTRUCTOR La sección contiene datos para las listas constructor / destructor. La sección HASCONTENTS no está vacía. NEVERLOAD Una instrucción al enlazador para no dar salida a la sección. COFFSHAREDLIBRARY Notificación al vinculador de que la sección contiene información de biblioteca compartida de COFF. La sección ISCOMMON contiene símbolos comunes. Defina secciones trust-readonly en Tell gdb que las secciones readonly en su archivo de objeto son realmente de sólo lectura (es decir, que su contenido no cambiará). En ese caso, gdb puede extraer valores de estas secciones del archivo de objeto, en lugar del programa de destino. Para algunos objetivos (especialmente los incorporados), esto puede ser una mejora significativa para el rendimiento de depuración. El valor predeterminado está desactivado. Set trust-readonly-sections off Indica a gdb que no confíe en secciones readonly. Esto significa que el contenido de la sección puede cambiar mientras el programa se está ejecutando y, por lo tanto, debe ser recuperado del destino cuando sea necesario. Show trust-readonly-sections Muestra la configuración actual de las secciones readonly de confianza. Todos los comandos de especificación de archivos permiten nombres de archivo absolutos y relativos como argumentos. Gdb siempre convierte el nombre de archivo en un nombre de archivo absoluto y lo recuerda de esa manera. Gdb admite bibliotecas compartidas GNU / Linux, MS-Windows, SunOS, Darwin / Mach-O, SVr4, IBM RS / 6000 AIX, QNX Neutrino, FDPIC (FR-V) y DSBT (TIC6X). En MS-Windows gdb debe estar vinculado con la librería Expat para admitir bibliotecas compartidas. Ver Expat. Gdb carga automáticamente las definiciones de símbolos de las bibliotecas compartidas cuando utiliza el comando run o cuando examina un archivo central. (Antes de emitir el comando run, gdb no entiende referencias a una función en una biblioteca compartida, sin embargo, a menos que esté depurando un archivo central). Hay veces, sin embargo, cuando es posible que desee no cargar automáticamente las definiciones de símbolos de bibliotecas compartidas, como cuando son particularmente grandes o hay muchos de ellos. Para controlar la carga automática de símbolos de biblioteca compartida, utilice los comandos: set auto-solib-add mode Si el modo está activado. Los símbolos de todas las bibliotecas de objetos compartidos se cargarán automáticamente cuando el inferior comience la ejecución, se adjunte a un inferior independientemente iniciado o cuando el vinculador dinámico informe a gdb de que se ha cargado una nueva biblioteca. Si el modo está desactivado. Los símbolos deben cargarse manualmente, utilizando el comando sharedlibrary. El valor predeterminado está activado. Si su programa utiliza un montón de bibliotecas compartidas con información de depuración que toma grandes cantidades de memoria, puede disminuir la huella de la memoria gdb al impedir que cargue automáticamente los símbolos de las bibliotecas compartidas. Para ello, escriba set auto-solib-add off antes de ejecutar el inferior y, a continuación, cargue cada biblioteca cuyos símbolos de depuración necesita con sharedgext regexp. Donde regexp es una expresión regular que coincide con las bibliotecas cuyos símbolos desea cargar. Show auto-solib-add Muestra el modo de carga automática actual. Para cargar explícitamente los símbolos de biblioteca compartida, utilice el comando sharedlibrary: info share regex info sharedlibrary regex Imprime los nombres de las bibliotecas compartidas que están actualmente cargadas que coinciden con regex. Si se omite regex, imprima todas las bibliotecas compartidas que se cargan. Info dll regex Este es un alias de info sharedlibrary. Sharedglobal regex share regex Cargar símbolos de biblioteca de objetos compartidos para archivos que coincidan con una expresión regular de Unix. Al igual que con los archivos cargados automáticamente, sólo carga las bibliotecas compartidas requeridas por el programa para un archivo principal o después de escribir la ejecución. Si se omite regex se cargan todas las bibliotecas compartidas requeridas por el programa. Nosharedlibrary Descarga todos los símbolos de biblioteca de objetos compartidos. Esto descarta todos los símbolos que se han cargado desde todas las bibliotecas compartidas. Los símbolos de bibliotecas compartidas que se cargaron mediante solicitudes de usuario explícitas no se descartan. A veces es posible que desee que gdb se detiene y le da control cuando ocurre cualquiera de los eventos de la biblioteca compartida. La mejor manera de hacerlo es utilizar catch load y catch unload (ver Set Catchpoints). Gdb también soporta el comando set stop-on-solib-events para esto. Este comando existe por razones históricas. Es menos útil que establecer un catchpoint, porque no permite condiciones o comandos como lo hace un catchpoint. Set stop-on-solib-events Este comando controla si gdb debería darle control cuando el vinculador dinámico le avisa sobre algún evento de biblioteca compartida. El evento más común de interés es la carga o descarga de una nueva biblioteca compartida. Show stop-on-solib-events Muestra si gdb se detiene y te da control cuando ocurren eventos de biblioteca compartida. Las bibliotecas compartidas también se admiten en muchas configuraciones de depuración remota o cruzada. Gdb necesita tener acceso a las bibliotecas de objetivos, esto se puede lograr ya sea proporcionando copias de las bibliotecas en el sistema host o pidiendo a gdb que recupere automáticamente las bibliotecas del destino. Si se proporcionan copias de las bibliotecas de destino, deben ser las mismas que las bibliotecas de destino, aunque las copias en el destino se pueden quitar siempre y cuando no sean las copias del host. Para la depuración remota, debe indicarle a gdb dónde están las bibliotecas de destino, de modo que pueda cargar las copias correctas de la misma, puede intentar cargar las bibliotecas de hosts. Gdb tiene dos variables para especificar los directorios de búsqueda para bibliotecas de destino. Set ruta sysroot Utilice path como raíz del sistema para el programa que se está depurando. Cualquier ruta absoluta de la biblioteca compartida será prefijada con la ruta. Muchos cargadores de tiempo de ejecución almacenarán las rutas absolutas a la biblioteca compartida en la memoria de programas de destino. Cuando se inician procesos de forma remota y cuando se conectan a procesos que ya se están ejecutando (local o remoto), sus nombres de archivo ejecutables tendrán un prefijo de ruta si se notifica a gdb como absoluto por el sistema operativo. Si utiliza set sysroot para encontrar archivos ejecutables y bibliotecas compartidas, es necesario que las distribuya de la misma forma en que están en el destino, p. una papelera. / Lib y / usr / lib bajo path. Si el camino comienza con el objetivo de secuencia: y el sistema de destino es remoto, entonces gdb recuperará los binarios de destino del sistema remoto. Esto sólo se admite cuando se utiliza un destino remoto que admita el comando remote get (consulte Envío de archivos a un sistema remoto). La parte del camino que sigue al objetivo inicial: (si está presente) se utiliza como prefijo raíz del sistema en el sistema de archivos remoto. Si la ruta comienza con la secuencia remota: se convierte en la secuencia objetivo: por set sysroot 1. Si desea especificar una raíz local del sistema utilizando un directorio que pasa a llamarse target: o remote. Necesitas usar alguna variante equivalente del nombre ./target. Para los objetivos con un sistema de archivos basado en MS-DOS, como MS-Windows y SymbianOS, gdb intenta prefijar algunas variantes del nombre de archivo absoluto objetivo con path. Pero primero, en los hosts de Unix, gdb convierte todos los separadores de directorio de barra invertida en barras diagonales, porque la barra invertida no es un separador de directorio en Unix: Entonces, gdb intenta prefijar el nombre de archivo de destino con ruta. Y busca el nombre de archivo resultante en el sistema de archivos host: Si no encuentra el binario, gdb intenta quitar el lsquo. Rsquo de la especificación de la unidad, tanto por conveniencia, y, en el caso del sistema de archivos host que no soporta nombres de archivo con dos puntos: Esto hace posible tener una raíz del sistema que refleja un destino con más de una unidad. P. ej. Es posible que desee configurar sus copias locales de las bibliotecas compartidas del sistema de destino, como por ejemplo, y señale la raíz del sistema en / path / to / sysroot. Para que gdb pueda encontrar las copias correctas de c: sysbinfoo. dll. Y z: sysbinbar. dll. Si eso todavía no encuentra el binario, el gdb intenta quitar la especificación entera de la impulsión del nombre de archivo de la blanco: Esta última búsqueda hace posible no importarle el nombre de la impulsión, si usted no quiere o necesita. El comando set solib-absolute-prefix es un alias para set sysroot. Puede establecer la raíz del sistema predeterminada utilizando la opción rsquo lsquo --with-sysroot de configure-time. Si la raíz del sistema está dentro del prefijo binario configurado por gdb (configurado con lsquo --prefix rsquo o lsquo --exec-prefix rsquo), entonces la raíz del sistema por defecto se actualizará automáticamente si el gdb instalado se mueve a una nueva ubicación. Show sysroot Muestra el prefijo actual de la biblioteca ejecutable y compartida. Set solib-search-path path Si se establece esta variable, path es una lista de directorios separados por dos puntos para buscar bibliotecas compartidas. Lsquo solib-search-path rsquo se utiliza después de que lsquo sysroot rsquo no localiza la biblioteca o si la ruta a la biblioteca es relativa en lugar de absoluta. Si desea utilizar lsquo solib-search-path rsquo en lugar de lsquo sysroot rsquo, asegúrese de establecer lsquo sysroot rsquo en un directorio inexistente para evitar que gdb encuentre sus bibliotecas de hosts. Lsquo sysroot rsquo se prefiere establecerlo en un directorio inexistente puede interferir con la carga automática de símbolos de biblioteca compartida. Show solib-search-path Muestra la ruta de búsqueda de la biblioteca compartida actual. Set tipo de sistema de destino-archivo-tipo Tipo de sistema de archivo asumido para los nombres de archivo de destino reportados. Los nombres de archivo de la biblioteca compartida, según lo informado por el sistema de destino, pueden no tener sentido, tal como está en el sistema en el que se ejecuta gdb. Por ejemplo, cuando la depuración remota de un destino que tiene semántica de sistema de archivos basada en MS-DOS, de un host Unix, el destino puede estar informando a gdb una lista de bibliotecas compartidas cargadas con nombres de archivo como c: Windowskernel32.dll. En los hosts Unix, no hay concepto de letras de unidad, por lo que el prefijo lsquo c: rsquo normalmente no se entiende como indicando un nombre de archivo absoluto, y tampoco es la barra invertida normalmente considerado un carácter separador de directorio. En ese caso, el sistema de archivos nativo interpretaría este nombre absoluto de archivo absoluto como un nombre de archivo relativo sin componentes de directorio. Esto haría imposible apuntar gdb en una copia de las bibliotecas compartidas de objetivos remotos en el host usando set sysroot. Y poco práctico con set solib-search-path. Establecer target-file-system-type a dos-based le dice a gdb que interprete esos nombres de archivo de manera similar a como lo haría el destino, y que los asignará a nombres de archivos válidos en la semántica del sistema de archivos nativo de gdb s. El valor del tipo puede ser automático. Además de uno de los tipos de sistema de archivos admitidos. En ese caso, gdb intenta determinar la variante apropiada del sistema de archivos basada en el sistema operativo de objetivos actuales (consulte Configuración de la ABI actual). La configuración del sistema de archivos admitidos es: unix Instruir gdb para asumir que el sistema de archivos de destino es de tipo Unix. Sólo los nombres de archivo que comienzan el carácter de barra diagonal (lsquo / rsquo) se consideran absolutos y el carácter de separador de directorios también es la barra diagonal. Dos-based Instruya gdb para asumir que el sistema de archivos de destino está basado en DOS. Los nombres de archivo que comienzan con una barra diagonal o una letra de unidad seguido de dos puntos (por ejemplo, lsquo c: rsquo), se consideran absolutos y los caracteres de barra diagonal (lsquo / rsquo) y de barra invertida (lsquo rsquo) se consideran separadores de directorio . Auto Instruya gdb para utilizar el tipo de sistema de archivos asociado al sistema operativo de destino (consulte Configuración de la ABI actual). Este es el valor predeterminado. Cuando procesa nombres de archivos proporcionados por el usuario, gdb frecuentemente necesita compararlos con los nombres de archivo registrados en los programas de información de depuración. Normalmente, gdb compara sólo los nombres de base de los archivos como cadenas, lo cual es razonablemente rápido incluso para programas muy grandes. (El nombre base de un archivo es la última parte de su nombre, después de eliminar todos los directorios principales.) Este acceso directo en comparación se basa en la suposición de que los archivos no pueden tener más de un nombre de base. Esto suele ser cierto, pero las referencias a archivos que utilizan enlaces simbólicos o instalaciones de sistemas de archivos similares violan esa suposición. Si su programa registra archivos utilizando dichas instalaciones, o si proporciona nombres de archivo a gdb usando enlaces simbólicos, etc., puede establecer que los nombres de base pueden diferir de true para indicar a gdb que canonice completamente cada par de nombres de archivo que necesita comparar. Esto hará que las comparaciones de nombre de archivo sean precisas, pero a un precio de una desaceleración significativa. Set basenames-may-differ Configura si un archivo de origen puede tener varios nombres de base. Show basenames-may-differ Muestra si un archivo de origen puede tener varios nombres de base. Notas de pie de página 1 Históricamente, la funcionalidad para recuperar binarios del sistema remoto se proporcionó prefijando ruta con remote: 8. Examinar datos La forma usual de examinar los datos en su programa es con el comando print (abreviado p), o su sinónimo inspeccionar. Evalúa e imprime el valor de una expresión del idioma en el que está escrito su programa (consulte la sección Uso de GDB con diferentes idiomas). Print expr print / f expr expr es una expresión (en el idioma de origen). Por defecto, el valor de expr se imprime en un formato apropiado para su tipo de datos, puede elegir un formato diferente especificando / f. Donde f es una letra que especifica el formato, vea Formatos de salida. Print print / f Si omite expr. GDB vuelve a mostrar el último valor (del historial de valores, véase la sección Historial de valores). Esto le permite inspeccionar convenientemente el mismo valor en un formato alternativo. Una forma más baja de examinar los datos es con el comando x. Examina los datos en la memoria en una dirección especificada y la imprime en un formato especificado. Consulte la sección Examinar la memoria. Si está interesado en información sobre tipos o sobre cómo se declaran los campos de una estructura o una clase, utilice el comando ptype exp en lugar de imprimir. Consulte la sección Examinar la tabla de símbolos. 8.1 La impresión de expresiones y muchos otros comandos de GDB aceptan una expresión y calculan su valor. Cualquier tipo de constante, variable o operador definido por el lenguaje de programación que está utilizando es válido en una expresión en GDB. Esto incluye expresiones condicionales, llamadas de función, moldes y constantes de cadena. Por desgracia, no incluye los símbolos definidos por preprocesador definir comandos. GDB admite constantes de matriz en expresiones introducidas por el usuario. La sintaxis es. . Por ejemplo, puede utilizar el comando print para crear una matriz en la memoria que se ha mallocado en el programa de destino. Debido a que C está tan extendido, la mayoría de las expresiones mostradas en los ejemplos de este manual están en C. Consulte la sección Uso de GDB con diferentes idiomas. Para obtener información sobre cómo utilizar expresiones en otros idiomas. En esta sección, discutimos los operadores que se pueden utilizar en expresiones GDB, independientemente de su lenguaje de programación. Casts son compatibles en todos los idiomas, no sólo en C, porque es tan útil para emitir un número en un puntero con el fin de examinar una estructura en esa dirección en la memoria. GDB soporta estos operadores, además de los comunes a los lenguajes de programación: es un operador binario para tratar partes de la memoria como arrays. Consulte la sección Arrays artificiales. para más información. :: permite especificar una variable en términos del archivo o función donde se define. Véase la sección Variables del programa. Addr Se refiere a un objeto del tipo de tipo almacenado en la dirección addr en la memoria. Addr puede ser cualquier expresión cuyo valor sea un entero o puntero (pero los paréntesis se requieren alrededor de operadores binarios, igual que en un molde). Esta construcción se permite independientemente de qué tipo de datos se supone normalmente residir en addr. 8.2 Variables del programa El tipo más común de expresión a utilizar es el nombre de una variable en su programa. Las variables en las expresiones se entienden en el marco de pila seleccionado (ver sección Selección de un marco) deben ser: globales (o archivos estáticos) visibles de acuerdo con las reglas de ámbito del lenguaje de programación desde el punto de ejecución en ese marco Esto significa que En la función se puede examinar y utilizar la variable a cada vez que su programa se ejecuta dentro de la función foo. Pero sólo puede utilizar o examinar la variable b mientras el programa se ejecuta dentro del bloque donde se declara b. Hay una excepción: puede hacer referencia a una variable o función cuyo ámbito es un archivo de origen único, incluso si el punto de ejecución actual no está en este archivo. Pero es posible tener más de una variable o función con el mismo nombre (en diferentes archivos fuente). Si eso sucede, referirse a ese nombre tiene efectos impredecibles. Si lo desea, puede especificar una variable estática en una función o archivo en particular, utilizando la anotación de dos puntos y dos: Aquí el archivo o función es el nombre del contexto para la variable estática. En el caso de los nombres de archivo, puede utilizar comillas para asegurarse de que GDB analiza el nombre del archivo como una sola palabra; por ejemplo, para imprimir un valor global de x definido en f2.c. Este uso de :: está muy raramente en conflicto con el uso muy similar de la misma notación en C. GDB también admite el uso del operador de resolución de alcance C en expresiones GDB. Advertencia: Ocasionalmente, una variable local puede parecer que tiene el valor equivocado en ciertos puntos de una función - justo después de la entrada a un nuevo ámbito, y justo antes de salir. Es posible que vea este problema cuando esté siguiendo las instrucciones de la máquina. Esto se debe a que, en la mayoría de las máquinas, se necesitan más de una instrucción para configurar un marco de pila (incluidas las definiciones de variables locales) si se está pasando por instrucciones de máquina, las variables parecen tener valores incorrectos hasta que el marco de pila esté completamente construido. Al salir, usualmente también se necesita más de una instrucción de máquina para destruir un marco de pila después de comenzar a pasar por ese grupo de instrucciones, las definiciones de variables locales pueden haber desaparecido. Esto también puede ocurrir cuando el compilador realiza optimizaciones significativas. Para estar seguro de ver siempre valores precisos, desactive toda la optimización al compilar. Otro posible efecto de las optimizaciones del compilador es optimizar las variables no utilizadas fuera de existencia, o asignar variables a los registros (en contraposición a las direcciones de memoria). Dependiendo del soporte para estos casos ofrecidos por el formato de información de depuración utilizado por el compilador, GDB podría no ser capaz de mostrar valores para dichas variables locales. Si esto sucede, GDB imprimirá un mensaje como este: Para resolver estos problemas, recompile sin optimizaciones o utilice un formato de información de depuración diferente si el compilador admite varios de estos formatos. Por ejemplo, GCC, el compilador GNU C / C suele admitir la opción - gstabs. - gstabs produce información de depuración en un formato que es superior a los formatos como COFF. Puede ser capaz de utilizar DWARF2 (-gdwarf-2), que también es un formulario eficaz para información de depuración. Consulte la sección Opciones para depurar su programa o GNU CC en el uso de GNU CC. para más información. El operando izquierdo de debe residir en memoria. Los valores de matriz hechos de esta manera se comportan igual que otros arrays en términos de subíndice y se coaccionan a punteros cuando se usan en expresiones. Los arrays artificiales aparecen más a menudo en las expresiones a través del historial de valores (véase la sección Historial de valores), después de imprimir uno. Otra forma de crear una matriz artificial es usar un molde. Esto reinterpreta un valor como si fuera un array. El valor no necesita estar en la memoria: GDB calcula el tamaño para llenar el valor (como sizeof (value) / sizeof (tipo)). F. F. . . . .


No comments:

Post a Comment