Прежде чем я задам свой вопрос, я кратко опишу, как я получаю обратную связь от своих клиентов. Пишу приложение на C ++ на linux (opensuse).
Это приложение запускается скриптом (пусковой установкой), и в случае сбоя приложения создается дамп ядра (поскольку ulimit -c unlimited). Затем программа запуска генерирует обратную трассировку из основного файла с помощью gdb и снова запускает приложение, что дает пользователю возможность отправить отчет о сбое, содержащий обратную трассировку.
Теперь моя проблема и мой вопрос:
- проблема: дамп ядра может быть довольно большим (до 5 или 10 ГБ). Копирование основного файла занимает определенное время (до 2 минут). Это проблема моих клиентов: слишком много времени между сбоем и автоматическим перезапуском приложения.
- вопрос: я генерирую трассировку с помощью gdb из 1) моей программы 2) основного файла. Когда приложение дает сбой, передает дамп ядра в программу по конвейеру.: могу ли я в этой программе напрямую прикрепить gdb к "умирающей" программе и сгенерировать трассировку, зарабатывая время на копирование основного файла на жесткий диск?
Заранее спасибо.
Просто замечание:
- Я сделал все, что мог, чтобы уменьшить до минимума размер дампа ядра (без символа отладки, только сбросить то, что необходимо для обратной трассировки (см. Управление отображениями, записываемыми в дамп ядра))
-g1
вместо-g
; и оптимизация-O1
или-O2
- person jcm   schedule 23.11.2013