Перегружено профилирование методов c ++ с использованием SystemTap - PullRequest
3 голосов
/ 20 октября 2011

Как я могу различить перегруженные методы, используя SystemTap проб?

* 1005 Е.Г. *

class A {
// ...
void doFoo();
void doFoo(int a);
// ...
};

В файле .stp:

probe process("foobar").function("A::doFoo<NO ARGS>").return {
    // do something
}
probe process("foobar").function("A::doFoo<USING INT>").return {
    // do something different
}

Учтите, что оба метода могут иметь несколько точек возврата, поэтому использование .statement(@file:line).

не стоит

1 Ответ

5 голосов
/ 21 декабря 2011

Начиная с этапа 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 также работает для поиска функций, содержащих строку, поэтому вы можете использовать егозакрепите свою функцию. Возвратите форму тоже, а не только.Вам не нужно беспокоиться обо всех точках возврата в этом случае - просто выберите любую строку в функции, которая вас интересует, и она перехватит все инструкции возврата.(Предполагается, что вы не имеете дело со строками.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...