Извлечение стека потока пользовательского пространства из дампа ядра ядра на FreeBSD - PullRequest
1 голос
/ 27 ноября 2011

Я пытаюсь отладить многопроцессорное решение на FreeBSD.Когда система / устройство испытывали сценарий зависания, мы вызвали дамп ядра через 'sysctl debug.panic = 1'.Намерением было зафиксировать состояние всех процессов в один и тот же момент времени.Тем не менее, я не могу заглянуть в потоки приложений пользовательского пространства.Используя 'ps', я могу перечислить все процессы / потоки в пользовательском пространстве, но не могу установить их стековый фрейм и развернуть, используя 'bt'.

Можно ли добиться чего-то похожего на то, что я пытаюсь выполнить?Я видел отладчик OpenVMS (IIRC даже windbg), позволяющий заглядывать в потоки пространства пользователя.

Ответы [ 2 ]

1 голос
/ 28 марта 2012

В DDB "bt / u" будет отслеживать пользовательскую часть стека потока. Смотрите "человек 4 дБ". Этого в сочетании с textdump может быть достаточно.

Если вам нужно работать только с ядром, все становится немного сложнее.

В kgdb «info threads» перечислит все потоки, которые работали во время сбоя ядра. После этого «поток X», за которым следует «bt», даст вам часть стека потока в ядре.

Получить пользовательскую часть приложения будет сложнее. Самый простой способ сделать это, вероятно, состоит в том, чтобы изменить приложение gcore так, чтобы оно использовало libkvm для поиска структур виртуальных машин, связанных с данным процессом, и, по существу, для реконструкции coredump процесса. Это возможно, но я не думаю, что на данный момент есть готовое к использованию решение.

1 голос
/ 05 марта 2012

Использовать DDB. Поддерживает отслеживание потоков. См. эту статью . В той же статье также указаны kgdb команды для отслеживания потоков в пользовательском пространстве. Но они не найдены на странице руководства. : - (

...