Сценарий:
Существует сложное программное обеспечение, которое раздражает запускать вручную. Я создал скрипт Python для запуска исполняемого файла и прикрепил gdb для отладки.
Сценарий запуска процесса:
- гарантирует, что переменная окружения установлена.
- обеспечивает добавление локального каталога сборки в переменную
LD_LIBRARY_PATH
среды.
- изменяет текущий рабочий каталог на тот, где должен находиться исполняемый файл (не мой дизайн)
- запускает исполняемый файл с файлом конфигурации, единственный параметр командной строки
- направляет вывод из исполняемого файла во второй процесс регистрации
- запоминает PID исполняемого файла, затем запускает и присоединяет gdb к исполняемому файлу.
Скрипт работает, с одной оговоркой. ctrl-c не прерывает отладчика и не возвращает управление gdb. Так что, если я "продолжаю" без активных точек останова, я никогда не смогу остановить процесс снова, его нужно убить / прервать из другой оболочки. Кстати, запуск "kill -s SIGINT ", где - это pid отладчика, возвращает меня к приглашению GDB ... но это действительно раздражает, когда я так поступаю
Сначала я подумал, что Python захватывает сигнал SIGINT, но, похоже, это не так, поскольку я настраивал обработчики сигналов, которые перенаправляют сигнал отладчику, и это не решает проблему.
Я пробовал различные конфигурации для скрипта Python (вызывая os.spawn * вместо подпроцесса и т. Д.) Кажется, что в любом случае, если Python запустил дочерний процесс, SIGINT (ctrl-c) сигнализирует НЕ перенаправлять на gdb или дочерний процесс.
Текущее мышление
- Это может быть связано с необходимостью
отдельный идентификатор группы процессов для debugee & gdb ... есть ли в этом подтверждение?
- Возможная ошибка с SELinux?
Информация:
- ГБД 6,8
- Python 2.5.2 (проблема присутствует и в Python 2.6.1)
- Среда SELinux (ошибка доставки сигналов процессам?)
Альтернативы, которые я рассмотрел:
- Настройка файла .gdbinit для выполнения того же, что и сценарий, переменные окружения и текущий рабочий каталог - проблема этого подхода.
- Запуск исполняемого файла и присоединение GDB вручную (гадость)
Вопрос:
Как вы автоматизируете запуск / отладку крупномасштабных проектов?
Обновление:
Я попробовал приведенные ниже примеры Николаса Райли: на моем Macintosh дома все они позволяют cntl-c работать в разной степени, на производственном boxen (который, как я теперь считаю, может работать под SELinux) они не ...