Могу ли я получить стек вызовов python с linux perf?
Например,
def test():
print "test"
Я использовал perf record -g -p $pid, но результат был всего лишь PyEval_EvalFrameEx. Как я могу получить реальное имя "тест" или если не могу, используя perf?
Ответ 1
Вы не сможете сделать это с помощью perf, специально созданного для интерфейса модели процесса Linux, декодирования этих фреймов стека и т.д. Он делает то, что, как предполагалось, сообщает вам, что он выполняет функцию PyEval_EvalFrameEx. Он должен быть расширен с помощью информации, специфичной для python, чтобы иметь возможность фактически декодировать информацию о кадре Python, чего не должно произойти. К сожалению, я не нашел действительно хороший способ легко отлаживать модули Python и C/С++. Обычно это pdb для одного и gdb для другого.
Ответ 2
Возможно, модуль трассировки сделает трюк для вас: