¿Es posible depurar un programa compilado por gcc usando lldb, o depurar un programa compilado por clang usando gdb?


(Prefacio: Soy bastante nuevo en C/C++ y realmente no sé cómo funciona la depuración en código nativo.)

Algunas fuentes dicen que gdb y lldb pueden depurar cualquier programa compilado a código máquina. Otros dicen que para depurar con gdb debecompilar en gcc con la bandera -g . La propia documentación de gcc sugiere que esto es opcional, y que de hecho, si lo usa, puede causar problemas para los depuradores que no sean gdb. Clang también tiene un -g flag y la documentación básicamente solo dice " Generar información de depuración."

Entonces, ¿estos depuradores están restringidos a sus propias cadenas de herramientas (GNU y LLVM), o son de alguna manera independientes del compilador utilizado?

Author: Neil Traft, 2014-01-15

1 answers

En teoría debería ser capaz de depurar un programa construido por GCC con lldb y un programa construido por LLVM con gdb. En ambos casos debes compilar con -g.

Esto se debe a que ambos compiladores generan archivos objeto en el mismo formato (por ejemplo, en Linux, ambos generarán archivos ELF con DWARF información de depuración) y ambos depuradores saben cómo analizar ese formato.

En la práctica, ambos compiladores introducen algunos datos en la información de depuración que solo su depurador respectivo sabe cómo consumir. Sin embargo:

  1. Los datos generados por LLVM no deben obstaculizar el bgf de ninguna manera.
  2. Los datos generados por GCC no deben obstaculizar lldb, pero si lo hace, puede específicamente pedir a gcc que no agregue datos no estándar. Por ejemplo, en Linux, usar -gdwarf-2 sobre -g solo debería generar DWARF compatible con el estándar.

Observe que también puede depurar programas sin información de depuración (no compilada con -g), pero estará limitado a información de bajo nivel en el depurador-código de ensamblado, memoria y registros-y no será capaz de ver construcciones de alto nivel como números de línea, nombres de funciones, mapeo entre nombres de variables y su contenido, etc.

 37
Author: Oak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-15 09:18:47