2010-01-22 13 views
68

Me gustaría tener gdb ejecutar inmediatamente el ejecutable, como si hubiera escrito "ejecutar" (motivación: no me gusta escribir "ejecutar").gdb - ¿Cómo ejecutar automáticamente el ejecutable?

Una forma es canalizar el comando gdb así:

$ echo run | gdb myApp 

Pero el problema con este enfoque es que se pierde la interactividad con gdb, por ejemplo. si se desencadena un punto de interrupción o myApp se cierra, gdb. Este método se trata here.

Mirando las opciones en --help, no veo una manera de hacer esto, pero quizás me falta algo.

Respuesta

99
gdb -ex run ./a.out 

Si necesita pasar argumentos a a.out:

gdb -ex run --args ./a.out arg1 arg2 ... 

EDIT: Orion dice esto no funciona en Mac OSX.

La bandera -ex ha estado disponible desde GDB-6.4 (publicado en 2005), pero OSX utiliza tenedor de GDB de Apple, y la última XCode para Leopard contiene GDB 6.3.50-20050815 (Apple version gdb-967), por lo que no están de suerte.

La corriente de edificio GDB-7.0.1 es una solución posible. Solo asegúrese de leer this.

+1

gracias por la respuesta. esa línea se comporta igual que solo "gdb ./a.out" para mí aunque. –

+2

Acabo de confirmar que también puede pasar múltiples opciones -ex en la línea de comandos y que se ejecutarán en orden antes de transferir la entrada de gdb. –

+0

¿Alguien sabe cómo hacer que esto funcione en OSX? – Dave

20

me gustaría utilizar una GDB-script:

gdb -x your-script 

donde su script contiene algo como:

file a.out 
b main 
r 

después usted tiene el BGF interactiva normales pronta

EDITAR:

aquí es una optimización para los más perezosos:

  1. guardar el script como .gdbinit en el working directory.
  2. Después usted sólo tiene que ejecutar el BGF como

    gdb

... y GDB automáticamente carga y ejecuta el contenido de .gdbinit.

+0

hey gracias por la respuesta. que parece exactamente lo que quiero, excepto que no recibo el mensaje gdb, recibo la suspensión de gdb y vuelvo a la línea de comandos como si hubiera tecleado "ctrl-z". si "fg", entonces gdb se reanuda y la aplicación se ejecuta. esto es OS X. –

+0

orion: mmmh - eso es sorprendente para mí. Funciona bien con todos los sabores de UNIX que estoy usando (Linux, Solaris, AIX). ¿Qué versión de gdb estás usando? –

+0

Acabo de volver a verificar el comportamiento de esto, todavía me sale a la línea de comandos con gdb suspendido.GNU gdb 6.3.50-20050815 (versión de Apple gdb-1518) (sáb 12 feb 02:52:12 UTC 2011). –

19
(echo r ; cat) | gdb a.out 

El gato le permite seguir escribiendo después de los saltos de gdb.

+0

whoa, impresionante. tienes que ctrl-c después de salir de gdb para detener al gato, pero eso es genial. –

+3

Parece que pierde algo de control de clave en la instancia de gdb al usar esto. –

+0

Por otra parte, preguntas como 'Hacer punto de interrupción pendiente en la futura carga de la biblioteca compartida? (y o [n]) 'asumirá automáticamente la respuesta" No ". – Ruslan

3

gdb -x <(echo run) --args $program $args

4

inicio es otra buena opción:

gdb -ex start ./a.out 

Es como correr, pero también establece un punto de interrupción temporal en main y se detiene allí.

Este punto de interrupción temporal se desactiva una vez que se golpea.

Cuestiones relacionadas