Начиная с этапа 1.4, он должен работать для поиска искаженных имен, по крайней мере, если debuginfo их описал.Я создал тестовую программу на вашем примере, и "_ZN1A5doFooEv" и "_ZN1A5doFooEi" работали для случаев void и int соответственно.Хотя от компилятора зависит правильное имя MIPS_linkage_name.Иногда он может работать и из таблицы символов, но это не обязательно охватывает все оптимизированные версии функции, которые мог сгенерировать компилятор.
Чтобы увидеть все обнаруженные искаженные имена, попробуйте stap -l 'process("foobar").function("_Z*")'
._Z необходим в подстановочном знаке для запуска обработки искаженных имен.
Если stap обнаруживает точки проверки, но они не срабатывают, как вы ожидаете, возможно, компилятор испускает несколько версийвашей функции, как встроенные, так и нет.Попробуйте stap -l 'process("foobar").function("_Z*").*'
, чтобы увидеть те варианты .call, .inline и .return, которые найдет степ.Помните, что зонды .return не работают со встроенными функциями, поэтому они соответствуют только экземплярам .call.
Обратите внимание, что синтаксис @file: line также работает для поиска функций, содержащих строку, поэтому вы можете использовать егозакрепите свою функцию. Возвратите форму тоже, а не только.Вам не нужно беспокоиться обо всех точках возврата в этом случае - просто выберите любую строку в функции, которая вас интересует, и она перехватит все инструкции возврата.(Предполагается, что вы не имеете дело со строками.)