Я только начинаю использовать systemtap. В моей 64-битной системе Ubuntu 13.04 я установил systemtap и dependencies + systemtap-doc и elfutils, затем добавил репозиторий ddep в мой apt / sources.list и установил пакет dbgsym для своего ядра (3.8.0-29.42).
Затем я попытался запустить примеры в / usr / share / doc / systemtap-doc / examples / general (например, key.stp), но получил
semantic error: not accessible at this address [man error::dwarf] ... identifier '$event_type' at key.stp:8:7
, а затем запустил «Работа вокруг разбитого файла dbgsym layount ... "- скрипт, как описано в wiki.ubuntu.com/Kernel/Systemtap
Тем не менее такая же ошибка и подобные ошибки возникают при запуске других скриптов всякий раз, когда локальный Переменная доступна.
Итак, я написал небольшой сценарий после раздела «Определение локальных переменных в точке проверки» на той же странице, чтобы дать мне список локальных переменных в kbd_event.
probe begin {
printf ("probe installed")
}
probe kernel.function("kbd_event") {
printf ("%s locals [%s]\n", probefunc(), $locals)
exit()
}
, что дает мне
probe installed
kbd_event locals []
Таким образом, похоже, что Stap не видит локальных переменных, и вот где я застрял.
Есть идеи, что мне не хватает или что я мог бы попробовать дальше?
Спасибо!
PS: Та же процедура отлично работает на моем 64-битном 12.04 с ядром 3.2.0-49.75. [ 1113]
Обновление: теперь я даже пересобрал ядро с помощью символов отладки, используя gcc 4.7, но все еще без улучшений.