Подтвердить что ты не робот

Используйте GDB для отладки программы на С++, вызванной из оболочки script

У меня очень сложная оболочка script, в которой она вызывает программу на С++, которую я хочу отлаживать через GDB. Крайне сложно отделить эту программу С++ от оболочки, так как она имеет множество веток и множество настроек переменных окружения.

Есть ли способ вызвать GDB в этой оболочке script? Похоже, gdb требует, чтобы я вызывал программу на С++ напрямую.

4b9b3361

Ответ 1

Есть два варианта, которые вы можете сделать:

  • Вызовите GDB непосредственно в оболочке script. Это означало бы, что у вас нет стандартного и стандартного перенаправления.

  • Запустите оболочку script, а затем присоедините отладчик к уже запущенному процессу С++, например: gdb progname 1234 где 1234 - это идентификатор процесса запущенного процесса С++.

Если вам нужно сделать что-то до запуска программы, тогда вариант 1 будет лучшим выбором, иначе вариант 2 будет более чистым.

Ответ 2

В дополнение к параметрам, указанным @diverscuba23, вы можете сделать следующее:

gdb --args bash <script>

(предположим, что это bash script. Else соответствующим образом адаптируется)

Ответ 3

Я бы, вероятно, изменил script, чтобы всегда вызывать gdb (и возвращать его позже) или добавить параметр для вызова gdb. Это почти всегда будет самым простым решением.

Следующим самым простым было бы временно переместить исполняемый файл и заменить его оболочкой script, которая запускает gdb в перемещенной программе. Например, в каталоге, содержащем вашу программу:

$ mv program _program
$ (echo "#!/bin/sh"; echo "exec gdb $PWD/_program") > program
$ chmod +x program

Ответ 4

Измените приложение С++, чтобы распечатать его pid и спать 30 секунд (возможно, на основе среды или аргумента). Прикрепите к исполняемому экземпляру с помощью gdb.

Ответ 5

Не могли бы вы просто добавить gdb в свой script?