¿Es posible depurar un pase llvm utilizando gdb? No pude encontrar ningún documento en el sitio de llvm.Depuración de un pase llvm con gdb
Respuesta
Sí. Cree LLVM en modo no liberado (el valor predeterminado). Lleva un poco más de tiempo que una versión de lanzamiento, pero puede usar gdb para depurar el archivo de objeto resultante.
Una nota de precaución: tuve que actualizar mi caja de Linux a 3 GB de memoria para hacer que el tiempo de enlace del modo de depuración LLVM sea razonable.
Siguiendo Richard Penningtons consejos + añadir acentos abiertos funciona para mí:
gdb /usr/local/bin/opt
continuación, escriba
run `opt -load=/pathTo/LLVMHello.so -hello </pathTo/your.bc> /dev/null`
Nota: (Rep. Faltante) me hubiera comentado, pero no pudieron
Primero asegúrese de que LLVM esté compilado con las opciones de depuración habilitadas, que es básicamente la configuración predeterminada. Si no compiló LLVM con opciones no predeterminadas, entonces su compilación actual debería estar bien.
Todas las pasadas LLVM se ejecutan utilizando la herramienta opt
(optimizador) de LLVM. Los pases se compilan en archivos de objeto compartido, es decir, archivo LLVMHello.so
en build/lib
y luego se cargan en la herramienta opt
. Para depurar o atravesar el pase, debemos detener LLVM antes de que comience a ejecutar el archivo .so
porque no hay forma de poner un punto de corte en un archivo de objeto compartido. En cambio, podemos poner un corte en el código antes de invoca el pase.
Vamos a poner un punto de interrupción en llvm/lib/IR/Pass.cpp
Así es como se hace:
Desplazarse construir/bin y terminal abierto y escriba
gdb opt
. Si compiló llvm con los símbolos de depuración agregados, entonces gdb tardará algún tiempo en cargar los símbolos de depuración, de lo contrario, gdb diráloading debugging symbols ... (no debugging symbols found)
.Ahora tenemos que establecer un punto de inflexión en el método
void Pass::preparePassManager(PMStack &)
enPass.cpp
. Este es probablemente el primer (o uno de los primeros) métodos involucrados en cargar el pase. Puede hacerlo escribiendobreak llvm::Pass::preparePassManager
en la terminal.Ejecutando el pase. Tengo un archivo de código binario llamado
trial.bc
y el mismo paseLLVMHello.so
así que corro conrun -load ~/llvm/build/lib/LLVMHello.so -hello < ~/llvmexamples/trial.bc > /dev/null
GDB ahora no se detendrá ante
Pass::preparePassManager
ya partir de aquí podemos utilizar paso y junto a trazar la ejecución.
Hola, creo que no agregué símbolos de depuración al compilar LLVM. ¿Todavía puedo usar gdb para la depuración? ¿Eso tendrá alguna limitación en la depuración? – algoProg
No debería haber ningún problema. –
- 1. gdb - depuración con tubería
- 2. plantillas de depuración con GDB
- 3. Depuración de bibliotecas desmontadas con gdb
- 4. Depuración con GDB - cómo escapar de un bucle
- 5. ¿Cómo uso un pase de función existente de mi pase LLVM?
- 6. Depuración usando gdb - Mejores prácticas
- 7. depuración Código de C++ con plantillas y STL con gdb
- 8. Depuración de código de usuario en xv6 con gdb
- 9. Trucos de depuración específicos de C++ con gdb
- 10. Incapaz de aplicación multiproceso de depuración con GDB
- 11. Compilación de GDB para la depuración remota
- 12. Visual studio + depuración remota de gdb
- 13. Cómo interpretar direcciones backtrace para la depuración con GDB
- 14. ¿Alguien probó la depuración inversa en gdb?
- 15. XCode LLVM + GCC 4.2 - Generar símbolos de depuración
- 16. Tutorial de depuración de subprocesos múltiples para GDB y C
- 17. enlace dinámico con LLVM
- 18. mensaje GDB raro cuando la depuración de programa en C++
- 19. no se encontraron símbolos de depuración al usar gdb
- 20. ¿Usar GDB sin símbolos de depuración en x86?
- 21. ¿Por qué se pierden los símbolos de depuración en el proceso de compilación/enlace de LLVM?
- 22. ndk-gdb con múltiples libs
- 23. ¿Cómo cambiar el valor de las variables mientras se depura con LLVM en Xcode?
- 24. problema de gdb con la redirección stdin
- 25. Xcode 3.2 + LLVM = sin símbolos locales al depurar
- 26. Depuración de un núcleo producido por valgrind
- 27. ¿Cómo se configura la bandera de depuración de GDB con cmake?
- 28. Identificar el bucle adjunto de un bloque en LLVM
- 29. Depuración del programa MinGW con gdb en Windows, no termina en la falla de afirmación
- 30. pthread_cond_timedwait colgado con gdb
¿Pero puedo depurar un pase de ILVM? Los pases LLVM generalmente se ejecutan usando opt, por lo que no sé cómo usar gdb para ejecutarlo. ¿Puedes decirme el comando? –
Puede ejecutar, p. "gdb/usr/local/bin/opt" y escriba "ejecutar". –
http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name