我正在阅读perf的源代码,并尝试了解perf record
如何获取触发perf计数的目标进程的指令的虚拟内存地址(例如{{的虚拟地址} 1}},这是由call test
的注释监视的汇编代码。什么数据结构用于存储使perf事件发生并触发计数器的指令的虚拟地址?
答案 0 :(得分:1)
为了获取样本的指令指针,您必须在PERF_SAMPLE_IP
中包含perf_attr.sample_type
perf_event_open
调用。这将在ip
事件的结构中包含PERF_RECORD_SAMPLE
字段,您可以从mmap
环形缓冲区中读取该字段。有关详细信息,请参阅联机帮助页。
PERF_RECORD_SAMPLE
This record indicates a sample.
struct {
struct perf_event_header header;
u64 sample_id; /* if PERF_SAMPLE_IDENTIFIER */
u64 ip; /* if PERF_SAMPLE_IP */
u32 pid, tid; /* if PERF_SAMPLE_TID */
u64 time; /* if PERF_SAMPLE_TIME */
...