Directorio de artículos
1. Introducción a gdb
GDB es una poderosa herramienta de depuración de programas basada en la línea de comandos bajo el sistema operativo UNIX/LINUX lanzado por la organización de código abierto GNU. Para un programador c/c++ que trabaje bajo Linux, gdb es una herramienta esencial;
Dos, instalación gdb
sudo yum install -y gdb
Tres, uso gdb
3.1, versiones de lanzamiento y depuración
En el proceso de desarrollo del programa, hay dos versiones, una es la versión de lanzamiento y la otra es la versión de depuración. Todos sabemos que si queremos depurar un programa, debemos tener una versión de depuración del programa antes de poder depurarlo.
Compruebe la versión del programa en Linux:
readelf -S test
Aquí podemos encontrar que no hay información sobre la depuración. De hecho, en Linux, gcc/g++
la versión predeterminada generada por el compilador es la versión de lanzamiento, si queremos ingresar la versión de depuración, debemos traer -g
la opción
gcc mytest.c -o mytest -g
Resumir:
- Hay dos formas de liberar el programa, el modo de depuración y el modo de liberación
- El programa ejecutable predeterminado generado por el compilador gcc/g++ en Linux es el modo de liberación
- Para usar la depuración de gdb, debe agregar la opción -g
3.2, comandos básicos gdb
1. Inicie gdb
gdb + archivo de programa ejecutable, de la siguiente manera:
gdb mytest_g
gdb -q mytest_g //表示不打印gdb版本信息,界面较为干净;
2. Comando de depuración
Compare con el comando de depuración en vs:
en gdb:
nombre | Orden | explicar |
---|---|---|
iniciar operación | run(r) |
Equivalente a iniciar la depuración F5 , se detendrá en el punto de interrupción después de ejecutar el código |
oración por oración | step(s) |
Equivalente F11 , hay funciones que entrarán en el interior de la función |
paso a paso | next(n) |
Es equivalente F10 a no ingresar a la función y ejecutar la instrucción completa; |
Después de ingresar una vez un comando como proceso por proceso y declaración por declaración, se ejecutará nuevamente si presiona Entrar directamente.
vs2019:
ejecute la demostración:
-
depuración directa
-
paso a paso
-
oración por oración
3. Mostrar código (lista)
nombre | Orden | explicar |
---|---|---|
Se puede especificar el número de línea | list(l) + [N] |
Muestre 10 líneas de código desde la línea N y continúe imprimiendo desde la última posición |
Se puede especificar el nombre de la función | list(l) + Name |
Muestra el código desde la izquierda y la derecha del comienzo de la función. |
4. Comando de punto de interrupción (punto de interrupción)
nombre | Orden | explicar |
---|---|---|
un punto de ruptura de línea | b + N |
poner un punto de ruptura en una línea |
punto de ruptura de función | b + FuncName |
punto de interrupción al comienzo de la función |
ver punto de interrupción | info + b |
Mostrar una lista de información de puntos de interrupción |
eliminar punto de interrupción | d + N |
Elimine el punto de interrupción cuyo número de secuencia es N y omita el número de secuencia para eliminar todos los puntos de interrupción |
habilitar punto de interrupción | enable + N |
Habilite el punto de interrupción con el número de secuencia N, omitir el número de secuencia significa habilitar todos los puntos de interrupción |
deshabilitar punto de interrupción | disable + N |
Deshabilite el punto de interrupción cuyo número de serie es N y omita el número de serie para deshabilitar todos los puntos de interrupción |
5. Comando variable (variable)
nombre | Orden | explicar |
---|---|---|
monitorear variables | display + ValName |
A menudo se muestra en la parte inferior de la pantalla en forma de lista, similar a la supervisión en vs. |
desvelar | undisplay + N |
Eliminar la visualización constante del número de variable N en la lista de observación |
ver variables | p + Name |
Imprime el valor de la variable, no siempre se muestra |
modificar variables | set + Name |
establecer el valor de la variable especificada |
6. Comandos especiales de depuración
nombre | Orden | explicar |
---|---|---|
fin de la función actual | finish |
finish finalizará directamente la llamada de la función actual y se detendrá en la posición de retorno de la función |
sigue corriendo | continue(c) |
continuar Continuar para ejecutar hasta el siguiente punto de interrupción, equivalente a F5 |
ejecutar a la línea especificada | until + N |
Corre a la línea N dentro de la función actual |
7. Comandos de la pila de llamadas
nombre | Orden | explicar |
---|---|---|
pila de llamadas | breaktrace/bt |
Ver el estado de la llamada de los marcos de pila en todos los niveles del programa |
8. Mostrar variables temporales en la función actual: info locales
nombre | Orden | explicar |
---|---|---|
Mostrar variables temporales en la función actual | info locals |
Mostrar variables temporales en la función actual |