c - tutorial - gdb ubuntu
La mayoría de los comandos difíciles/útiles para depurador gdb (12)
¿Puedes publicar tus comandos más complicados y útiles mientras ejecutas un depurador como gdb o dbx?
- backtrace full : traza inversa completa con variables locales
- arriba , abajo , marco : moverse a través de marcos
- reloj : suspender el proceso cuando se cumple una determinada condición
- set print pretty on : imprime el código fuente de C con un bonito diseño
- configure el inicio de sesión: registro de la sesión de depuración para mostrar a los demás el soporte
- set print array en : Pretty array printing
- terminar : continuar hasta el final de la función
- habilitar y deshabilitar : habilitar / deshabilitar puntos de interrupción
- tbreak : rompa una vez y luego elimine el punto de corte
- donde : Número de línea que se está ejecutando actualmente
- locales de información : Ver todas las variables locales
- info args : Ver todos los argumentos de la función
- lista : ver fuente
- rbreak : interrupción de la función que coincide con la expresión regular
A partir de gdb 7.0, hay una depuración reversible , por lo que sus nuevos comandos favoritos son:
* reverse-continue (''rc'') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next (''rn'') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti (''rni'') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step (''rs'') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.
Comience gdb con una interfaz de usuario textual
gdb -tui
En lugar de ejecutar GDB con el parámetro "-tui", también puede pasar al modo de texto al cabo de un tiempo escribiendo "wh".
En lugar de iniciar gdb con la opción -tui para ver un proceso secundario que contiene una pantalla que destaca dónde se encuentra la línea de código ejecutable en su programa, salte y salga de esta función con Cx o y Cx a. Esto es útil si está usando la función y qué no usarla temporalmente para que pueda usar la flecha hacia arriba para obtener un comando anterior.
Esto puede ser útil, estoy seguro de que podría mejorarse, ayuda de bienvenida:
define mallocinfo
set $__f = fopen("/dev/tty", "w")
call malloc_info(0, $__f)
call fclose($__f)
Para depurar STL, agregue contenido a .gdbinit, siga estas instrucciones:
Por ejemplo, las macros definidas en stl-views.gdb
Usando la opción -command=<file with gdb commands>
al encender gdb. Igual que -x <command file>
. Este archivo de comandos puede contener comandos gdb como puntos de interrupción, opciones, etc. Útil en caso de que un ejecutable en particular deba pasar por sucesivas ejecuciones de depuración usando gdb.
scripting gdb es un buen truco, aparte de eso, me gusta configurar / desactivar el programador para evitar que se ejecuten otros subprocesos cuando se encuentre en uno.
thread apply all bt
o thread apply all print $pc
: para averiguar rápidamente lo que están haciendo todos los hilos.
- Usando .gdbinit (archivo de inicio donde puede escribir macros y llamar desde gdb). Coloque .gdbinit en su directorio de inicio para que se recoja cada vez que se carga gdb
hilos de información para listar todos los hilos activos, y f (#) -> # número de hilo al que desea cambiar
alguna vez uso gdb para convertir de hexadecimal a decimal o binario, es muy útil en lugar de abrir una calculadora
- p / d 0x10 -> da el equivalente decimal de 0x10
- p / t 0x10 -> equivalente binario de 0x10
- p / x 256 -> equivalente hexadecimal de 256