Извлечение отладочной информации из основных файлов

Мне поручили написать сценарий для очистки старых файлов ядра на производственных серверах Linux. Хотя написать сценарий несложно, я хотел бы сохранить базовую трассировку стека в файл журнала перед удалением основных файлов.

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

Кто-нибудь знает о таком инструменте?

Заранее спасибо.


person moonchild    schedule 13.08.2013    source источник
comment
Можете ли вы скопировать файл ядра на другую машину, на которой есть установлен gdb?   -  person joev    schedule 13.08.2013
comment
Идея состоит в том, чтобы получить и сохранить некоторую информацию о сбое перед удалением основного файла автоматическим сценарием. Таким образом, просматривая журналы, я мог видеть, что приложение, которое продолжает падать, падает в одном и том же месте, а не теряет всю информацию о сбое.   -  person moonchild    schedule 14.08.2013
comment
Подумайте о том, чтобы связать некоторую библиотеку обратной трассировки с программным обеспечением....   -  person Basile Starynkevitch    schedule 14.08.2013
comment
У нас также есть программа, работающая на производственных серверах Linux, и на них установлено gdb. Почему вы не рассматриваете возможность установки gdb на серверы? Зачем все усложнять?   -  person    schedule 15.08.2013


Ответы (1)


Есть несколько подобных вещей. В основном они неполны по сравнению с gdb — например, обратные трассировщики редко печатают информацию об аргументах функций или локальных переменных, но gdb может это сделать. Также gdb часто может раскручиваться в тех случаях, когда другие разматыватели захлебываются.

Во всяком случае, один из них, о котором я знаю, это elfutils. https://fedorahosted.org/elfutils/. У него есть разматыватель в разработке (не уверен, что он уже есть, проверьте git).

Также есть libbacktrace. Он является частью gcc и предназначен для раскручивания в процессе. Тем не менее, его, возможно, можно было бы адаптировать к основным файлам.

Есть еще либувинд. Я слышал, что это ужасно, но YMMV.

Следует отметить, что многие из них требуют наличия отладочной информации.

И последнее замечание: ребята из ABRT проделали большую работу в области «поймать след». ABRT использует ловушку ядра, чтобы поймать дамп ядра во время его создания. Затем он выполняет анализ, загружая ядро ​​​​на сервер, файлы с ошибками и т. Д. Возможно, вы могли бы повторно использовать большую часть их работы. Есть и другие работы в этом пространстве.

Типа свалка мозга, надеюсь поможет.

person Tom Tromey    schedule 14.08.2013