Última actualización:2026-10-12
Depuración con la extensión Python de GDB¶
0. Introducción¶
La depuración es un eslabón indispensable en el proceso de desarrollo de software, y GDB (el depurador de GNU), como herramienta de depuración potente, goza de un amplio uso entre los desarrolladores. Además de las funciones tradicionales de depuración por línea de comandos, GDB ofrece la biblioteca GDB de Python, que permite a los desarrolladores usar el lenguaje Python para extender y potenciar la depuración. Este artículo presentará cómo usar la biblioteca GDB de Python dentro de GDB, mostrando sus potentes funciones de depuración y sus casos de uso.
Antes de empezar, asegúrate de tener correctamente instalados Python y GDB, y de que la versión de Python sea compatible con GDB. Después, instala la biblioteca GDB de Python siguiendo estos pasos:
a. Ejecuta gdb en la línea de comandos para abrir GDB.
b. Escribe el comando python para entrar en el intérprete de Python de GDB.
c. Ejecuta import gdb; si no se produce ningún error, la biblioteca GDB de Python está correctamente instalada.
Durante la depuración con gdb solemos querer inspeccionar variables de estructuras complejas, como la estructura List de PostgreSQL, en la que cabe de todo y cuyo contenido es difícil de imprimir de forma intuitiva. Para ello, en nuestro desarrollo diario entran en juego los scripts de Python; un ejemplo:
(gdb) tl
TargetEntry [resno=1 resname="sum"]
Aggref [aggfnoid=2107 aggtype=1700 aggtranstype=2281 aggstar=false aggvariadic=false aggkind=110 'n' agglevelsup=0 aggsplit=AGGSPLIT_FINAL_DESERIAL aggno=0 aggtransno=0 agg_expr_id=0]
1. Hello python gdb¶
Podemos ejecutar algunas operaciones de Python dentro de gdb, por ejemplo print, como se muestra a continuación:
scssCopy code
(gdb) python
> print(1+2)
> end
3
(gdb) end
This command cannot be used at the top level.
En este ejemplo entramos en el intérprete de Python de GDB y ejecutamos una sentencia Python sencilla, print(1+2), cuyo resultado es 3.
Otro ejemplo: podemos escribir directamente python xxxx para ejecutar código.
En este ejemplo usamos una sentencia Python dentro de GDB para definir una variable f e imprimimos su valor, con resultado 2.
2. En la práctica: ¿cómo escribirlo?¶
El punto clave está en cómo escribir estos scripts, para así imprimir cómodamente nuestras propias estructuras. A continuación viene la parte práctica; el código y los materiales relacionados con esta sección se irán publicando en la comunidad (星球), te invitamos a seguirla:
Ahora tenemos una estructura Point y quiero imprimirla mediante un script: ¿cómo hacerlo?
La lógica es muy sencilla: leer la estructura y luego hacer print.
import gdb
def print_point(point):
print(f"Point: x={point['x']}, y={point['y']}")
def print_person(person):
age = person['age']
print(f"Person: age={age}")
class PrintCppStruct(gdb.Command):
def __init__(self):
super(PrintCppStruct, self).__init__("print_cpp_struct", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
try:
cl = gdb.parse_and_eval(arg)
if cl.type.code == gdb.TYPE_CODE_STRUCT and str(cl.type) == 'Point':
print_point(cl)
elif cl.type.code == gdb.TYPE_CODE_STRUCT and str(cl.type) == 'Person':
print_person(cl)
else:
print("Unknown C++ structure type.")
except gdb.error as e:
print(f"Error: {e}")
PrintCppStruct()
¿Cómo usarlo?
Basta con hacer source:
En este ejemplo cargamos en GDB, mediante el comando source, un script de Python llamado print.py.
En este ejemplo usamos en GDB un comando personalizado, print_cpp_struct, que gracias a la biblioteca GDB de Python imprime el valor de una estructura de C++ llamada myPoint.
Usando la biblioteca GDB de Python dentro de GDB, los desarrolladores pueden aprovechar la potencia de Python para extender y reforzar sus capacidades de depuración. Ofrece una API rica y una escritura de scripts flexible, lo que hace el proceso de depuración más eficiente y cómodo. Ya sea para automatizar tareas de depuración, para el análisis y la visualización de datos, o para modificar dinámicamente el comportamiento del programa, la biblioteca GDB de Python proporciona a los desarrolladores abundantes opciones y flexibilidad. Espero que este artículo te ayude a comprender y aplicar mejor la biblioteca GDB de Python y a mejorar tus habilidades de depuración y tu eficiencia en el desarrollo.
Temas relacionados¶
- Construir proyectos C++ con Bazel | C++那些事
- Depuración conjunta de Bazel y LLDB | C++那些事
- CMake: introducción y práctica | C++那些事
- Introducción a Conan, gestor de paquetes de C++ | C++那些事
- C++ Insights: observación en tiempo de compilación | C++那些事
- C++ Jupyter Notebook interactivo | C++那些事
- Convertir string a int en C++ | C++那些事
- dbg-macro, macro de depuración para C++ | C++那些事
- Explicación detallada de las opciones de compilación de GCC | C++那些事
- Depurar programas C++ con GDB | C++那些事