2014-11-13 12 views
20

Ví dụ,Tôi có thể nhận được ngăn xếp cuộc gọi python với perf hoàn hảo không?

def test(): 
     print "test" 

tôi đã sử dụng perf record -g -p $pid, nhưng kết quả chỉ là tất cả về PyEval_EvalFrameEx. Làm thế nào tôi có thể nhận được tên thật "thử nghiệm" hoặc nếu không thể bằng cách sử dụng perf?

+0

Tại sao bạn đặc biệt yêu cầu sử dụng 'perf'? – NPE

+1

Chương trình python của tôi sẽ gọi một số phần mở rộng C++, vì vậy tôi sử dụng perf để kiểm tra ngăn xếp cuộc gọi cho phần mở rộng C++, tôi cũng muốn nhận được trăn. – wuwl

Trả lời

2

Bạn sẽ không thể làm điều này với perf, đó là đặc biệt xây dựng để giao diện quá trình mô hình Linux, giải mã những chồng khung, vv Nó làm những gì nó nghĩa vụ phải nói với bạn rằng nó đã được thực hiện các chức năng PyEval_EvalFrameEx. Nó sẽ phải được mở rộng với thông tin cụ thể của python để có thể thực sự giải mã thông tin khung của Python, điều này sẽ không xảy ra. Thật không may tôi đã không tìm thấy một cách thực sự tốt để gỡ lỗi cả hai mô-đun Python và C/C++ dễ dàng. Nó thường là pdb cho một và gdb cho cái kia.

Các vấn đề liên quan