Как автоматически запустить исполняемый файл в GDB?


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

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

$ echo run | gdb myApp

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

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

5 74
gdb

5 ответов:

gdb -ex run ./a.out

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

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

изменить: Орион говорит, что это не работает на Mac OSX.

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

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

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

gdb -x your-script

здесь ваш скрипт содержится что-то вроде:

file a.out
b main
r

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

EDIT:

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

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

    gdb

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

(echo r ; cat) | gdb a.out

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

start команда

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

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

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

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

starti

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

здорово, когда вы делаете некоторые вещи низкого уровня.

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