comando addr2line en Linux con ejemplos

El comando addr2line en Linux se usa para convertir direcciones en nombres de archivos y números de línea. Cuando los archivos ejecutables/archivos objeto se ejecutan con el comando objdump , el archivo se desensambla y se muestra el código de la máquina. Estas instrucciones de máquina para el ejecutable se muestran junto con su ubicación de memoria (dirección). Con el comando addr2line, se puede asignar la dirección de la instrucción de la máquina a la línea del archivo desde el que se originó.

Sintaxis:

addr2line [options] [addr addr ...]

Nota:

  • Para los ejemplos, usaremos el archivo a.out que se obtiene después de compilar el siguiente programa C usando gcc.

  • También usaremos el código desensamblado del archivo ejecutable a.out . El siguiente comando se usa para obtener la parte principal del código desensamblado.
    objdump -D a.out | grep -A20 main.:
    

Opciones:

  • -e: se debe especificar el nombre del ejecutable para el que se deben traducir las direcciones. Las direcciones de este archivo se traducirán a su nombre de archivo y línea. (Para salir del comando addr2line, presione ctrl+c )
    addr2line -e a.out [addr1] [addr2]...

    De esto, podemos inferir lo siguiente:

    • Solo el segmento de código que se genera con la información de depuración podría generar con éxito una salida adecuada.
    • No todas las compensaciones de un programa darán con éxito el nombre de archivo y el número de línea correctos. Aquí, aunque 651 es un desplazamiento presente en la función principal, su línea y nombre de archivo no se pueden rastrear.
  • -f : Si se especifica la opción -f, también se imprime el nombre de la función a la que pertenece la dirección de línea/línea.
    addr2line -e a.out -f [addr1] [addr2] ....
    

    Ejemplo 1:

    De esto, podemos inferir lo siguiente:

    • Si el nombre del archivo y la línea se pueden asignar, se imprime junto con el nombre de la función. Aquí, la dirección 64a se puede asignar tanto a la función como al nombre del archivo + línea.
    • Incluso si el nombre de archivo + línea no se puede asignar, el nombre de la función, de la que forma parte la dirección, aún se imprime. Aquí, aunque la dirección no se puede asignar al nombre del archivo y la línea, el nombre de la función aún se imprime.

    Ejemplo 2: archivo C utilizado:

    Nota: El comando obj se usa junto con grep -A20 yolo. para mostrar el segmento sin ensamblar de la función yolo y la parte posterior.

  • -a, –direcciones: esta opción se utiliza para mostrar la dirección antes del nombre de la función, el archivo y la información del número de línea.
  • -s, –basenames: esta opción se usa para mostrar solo la base de cada nombre de archivo.
  • -j, –sección: esta opción leerá los desplazamientos relativos a la sección especificada en lugar de las direcciones absolutas.
  • -p, –pretty-print: esta opción se usa para hacer que la salida sea más amigable para los humanos.

Publicación traducida automáticamente

Artículo escrito por MukkeshMckenzie y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *