Как автоматически запустить исполняемый файл в GDB? - PullRequest
79 голосов
/ 22 января 2010

Я бы хотел, чтобы gdb немедленно запустил исполняемый файл, как если бы я набрал "run" (мотивация: мне не нравится печатать «беги»).

Один из способов - передать команду на gdb следующим образом:

$ echo run | gdb myApp

Но проблема этого подхода в том, что вы теряете интерактивность с gdb, например. если точка останова срабатывает или myApp падает, gdb завершается. Этот метод обсуждается здесь .

Глядя на параметры в --help, я не вижу способа сделать это, но, возможно, я что-то упускаю.

Ответы [ 5 ]

113 голосов
/ 23 января 2010
gdb -ex run ./a.out

Если вам нужно передать аргументы a.out:

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

РЕДАКТИРОВАТЬ: Orion говорит, что это не работает на Mac OSX.

Флаг -ex доступен с GDB-6.4 (выпущен в 2005 году), но OSX использует вилку GDB от Apple, а последний XCode для Leopard содержит GDB 6.3.50-20050815 (Apple version gdb-967), так что вам не повезло.

Создание текущей версии GDB-7.0.1 является одним из возможных решений.Обязательно прочитайте это .

22 голосов
/ 22 января 2010

Я бы использовал gdb-скрипт:

gdb -x your-script

где your-script содержит что-то вроде:

file a.out
b main
r

после этого у вас есть обычная интерактивная подсказка GDB

EDIT

вот оптимизация для действительно ленивых:

  1. сохранить скрипт как .gdbinit в working directory.
  2. После этого вы просто запускаете gdb как

    gdb

... и GDB автоматически загружает и выполняет содержимое .gdbinit.

20 голосов
/ 19 июня 2011
(echo r ; cat) | gdb a.out

Кошка позволяет вам продолжать печатать после перерывов в работе GDB.

6 голосов

start команда

Эта команда является еще одним хорошим вариантом:

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

Это похоже на run, но также устанавливает временную точку останова на main и останавливается там.

Эта временная точка останова деактивируется после нажатия.

starti

Существует также связанный starti, который запускает программу и останавливается на самой первой инструкции, см. Также: Останов на первой инструкции машинного кода в GDB

Замечательно, когда вы делаете какие-то вещи низкого уровня.

3 голосов
/ 12 июня 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...