Повторно запускайте GDB в исполняемом файле (и останавливайте сбои/ошибки)
Я пытаюсь выяснить способ повторного запуска исполняемого файла с помощью GDB и предпочтительно останавливать ошибки.
Я не мог найти способ сделать это в руководстве!
Спасибо
Ответы
Ответ 1
Я попробовал (в Bash):
while true ; do gdb -ex run a.out -ex quit ; done ;
К сожалению, это оказалось довольно сложным, чтобы убить, но он автоматизировал работу, и когда программа потерпела крах (я тестировал старую программу, которая вызывает SIGABRT), gdb спрашивает: "Программа запущена.? (y или n)", так что просто нажмите n.
Ответ 2
Я столкнулся с этой же проблемой и придумал то, что, по моему мнению, довольно хороший способ остановить бесконечный цикл, предложенный BoBTFish.
Вместо цикла while true
вы можете использовать наличие фиктивного файла для управления циклом, например:
touch loopfile; while [ -f loopfile ] ; do gdb -ex run a.out -ex quit ; done ;
Если вы хотите остановить бесконечный сеанс отладки, вы можете либо открыть новый терминал в том же каталоге, либо rm loopfile
, или вы можете выйти из того же терминала, прервав его с помощью control-c
, а затем удалив loopfile
из в пределах gdb
:
^CQuit
A debugging session is active.
Inferior 1 [process 11136] will be killed.
Quit anyway? (y or n) n
Not confirmed.
(gdb) shell rm loopfile
(gdb) quit
A debugging session is active.
Inferior 1 [process 11136] will be killed.
Quit anyway? (y or n) y
Надеюсь, это полезно кому-то в будущем, это похоже на хороший (если хакерский) способ отладки прерывистых проблем.
Ответ 3
Используйте оболочку script для повторного использования gdb
и используйте параметры --batch -x <cmdfile>
для gdb
, чтобы указать командный файл, который просто имеет слово run
для запуска программы. Так что-то вроде этого:
$ echo run > cmdfile ; while gdb --batch -x cmdfile myprogram ; do : ; done
Ответ 4
Пример аргументов Loop + LD path + командной строки
for i in {0..99}; do LD_LIBRARY_PATH=/some/path/to/libs gdb -ex 'set args arg1 arg2 arg3' -ex run ./execName -ex quit ; done