El depurador LLDB ( LLDB ) es el depurador creado por Chris Lattner como un componente del proyecto LLVM . Está construido como un conjunto de componentes reutilizables que utilizan ampliamente bibliotecas existentes de LLVM, como el analizador de expresiones Clang y el desensamblador LLVM . LLDB es software libre y de código abierto bajo la Licencia de Código Abierto de la Universidad de Illinois/NCSA , [ 3 ] una licencia de software permisiva de estilo BSD . Desde la versión 9.0.0, se cambió la licencia a la Licencia Apache 2.0 con Excepciones LLVM. [ 2 ]
Estado actual
LLDB admite la depuración de programas escritos en C , Objective-C y C++ . La comunidad de Swift mantiene una versión que añade soporte para este lenguaje. Free Pascal y el IDE Lazarus pueden usar LLDB como backend para su propio motor FpDebug.
Se sabe que el depurador LLDB funciona en macOS , Linux , FreeBSD , NetBSD y Windows , [ 4 ] y admite los conjuntos de instrucciones i386 , x86-64 y ARM . [ 5 ] LLDB es el depurador predeterminado para Xcode 5 y versiones posteriores. Android Studio también utiliza LLDB para la depuración. [ 6 ] LLDB se puede utilizar desde otros IDE, incluidos Visual Studio Code , [ 7 ] C++Builder , [ 8 ] Eclipse , [ 9 ] y CLion . [ 10 ]
Ejemplos de comandos
Una sesión de ejemplo
Considere el siguiente programa incorrecto escrito en C :
#include <stdio.h>int main ( void ) { char msg = "Hola, mundo! \n " ; printf ( "%s" , msg );devolver 0 ; }Utilizando el compilador clang en macOS , el código anterior se puede compilar usando la -gbandera para incluir la información de depuración apropiada en el binario generado, incluido el código fuente, lo que facilita su inspección con LLDB. Suponiendo que el archivo que contiene el código anterior se llama test.c, el comando para la compilación podría ser:
$ clang -Wno-error = int-conversion -g test.c -o testY ahora se puede ejecutar el binario:
$ ./test Error de segmentaciónDado que el código de ejemplo, al ejecutarse, genera un error de segmentación , se puede utilizar lldb para inspeccionar el problema:
$ lldb test (lldb) target create "test" El ejecutable actual se ha establecido en 'test' (x86_64). (lldb) run Proceso 70716 iniciado: '/Users/wikipedia/test' (x86_64) Proceso 70716 detenido * hilo n.° 1, cola = 'com.apple.main-thread', motivo de detención = EXC_BAD_ACCESS (código=1, dirección=0xffffff90) marco n.° 0: 0x00007fff6c7c46f2 libsystem_platform.dylib`_platform_strlen + 18 libsystem_platform.dylib`_platform_strlen: -> 0x7fff6c7c46f2 <+18>: pcmpeqb xmm0, xmmword ptr [rdi] 0x7fff6c7c46f6 <+22>: pmovmskb esi, xmm0 0x7fff6c7c46fa <+26>: y rcx, 0xf 0x7fff6c7c46fe <+30>: o rax, -0x1 Objetivo 0: (prueba) detenido.El problema se produce al llamar a la función strlen, pero podemos ejecutar un rastreo de pila para identificar la línea de código exacta que está causando el problema:
(lldb) bt * hilo n.° 1, cola = 'com.apple.main-thread', motivo de parada = EXC_BAD_ACCESS (código=1, dirección=0xffffff90) * marco n.° 0: 0x00007fff6c7c46f2 libsystem_platform.dylib`_platform_strlen + 18 marco n.° 1: 0x00007fff6c66b16a libsystem_c.dylib`__vfprintf + 8812 marco n.° 2: 0x00007fff6c6911c3 libsystem_c.dylib`__v2printf + 475 marco n.° 3: 0x00007fff6c668e22 libsystem_c.dylib`vfprintf_l + 54 marco n.° 4: 0x00007fff6c666f72 libsystem_c.dylib`printf + 174 marco #5: 0x0000000100000f6d test`main en test.c:5:2 marco #6: 0x00007fff6c5dc3d5 libdyld.dylib`start + 1 (lldb) lista de fuentes 3 int main(void) { 4 char msg = "Hola, mundo!\n"; 5 printf("%s", msg); 6 return 0; 7 }Desde la línea que comienza con frame #5, LLDB indica que el error está en la línea 5 de test.c. Al ejecutar source list, vemos que esto se refiere a la llamada a printf. Según el código de excepción EXC_BAD_ACCESSdel rastreo de pila, strlenestá intentando leer de una región de memoria a la que no tiene acceso desreferenciando un puntero no válido. [ 11 ] Volviendo al código fuente, vemos que la variable msges de tipo charpero contiene una cadena en lugar de un carácter. Para solucionar el problema, modificamos el código para indicar que msges un puntero a una cadena de charsagregando el *operador :
#include <stdio.h>int main ( void ) { char * msg = "Hola, mundo! \n " ; printf ( "%s" , msg );devolver 0 ; }Tras recompilar y ejecutar de nuevo el archivo ejecutable, LLDB ahora proporciona el resultado correcto:
(lldb) target create "test" El ejecutable actual se ha establecido en 'test' (x86_64). (lldb) run El proceso 93319 se ha iniciado: '/Users/wikipedia/test' (x86_64) ¡Hola, mundo! El proceso 93319 ha finalizado con estado = 0 (0x00000000) (lldb)LLDB ejecuta el programa, que imprime su salida printfen la pantalla. Una vez que el programa finaliza correctamente, LLDB indica que el proceso que lo ejecuta ha concluido e imprime su estado de salida.
Véase también
Referencias
- ↑ "Versión 22.1.8" . 16 de junio de 2026. Consultado el 17 de junio de 2026 .
- 1 2 LICENSE.TXT , llvm.org , consultado el 24/09/2019
- ↑ "Licencia de lanzamiento de LLVM"
- ↑ "Blog del proyecto LLVM" . 20 de enero de 2015.
- 1 2 "Estado de LLDB" . Consultado el 31 de enero de 2022 .
- ↑ "Depura tu aplicación" .
- ↑ "Añadir una nueva herramienta llamada "lldb-vscode" que implementa el protocolo del adaptador de depuración de Visual Studio Code" .
- ↑ "La versión 11.3 introduce un nuevo depurador basado en LLDB para macOS Intel y Android de 32 bits. Con la versión 11.3, todos los depuradores de plataformas que no son Windows, tanto para Delphi como para C++, han migrado a la arquitectura LLDB" .
- ↑ "CDT/Usuario/Preguntas frecuentes" .
- ↑ "Blog de LLDB CLion" . 7 de octubre de 2024.
- ↑ "Nota técnica TN2151: Comprensión y análisis de informes de fallos de aplicaciones" . Archivo de documentación . Apple Developer . Consultado el 13 de febrero de 2020 .
Enlaces externos
- Sitio web oficial
- Versiones de LLDB compatibles con Qt Creator
- Depuradores
- Software libre programado en C++
- Software programable mediante Lua (lenguaje de programación).
- Software que utiliza la licencia de código abierto de la Universidad de Illinois/NCSA.
- Software que utiliza la licencia Apache.
- Software de desarrollo de videojuegos para Linux