有时我们会有这样的需求,我们希望获得发生某个内核事件时的调用栈,从内核态一直到用户态。
庆幸的是,Linux提供了这样的机制和工具。下面分别用perf和trace_event来实现这个功能。
使用的平台是ARM64,下面事件events/exceptions/mem_abort_user
为例进行说明,这个事件是我仿照x86添加的,当用户态发生缺页异常时会触发这个事件。
使用下面的命令组合:
echo 'common_pid == 8469' > events/exceptions/mem_abort_user/filter
echo 1 > events/exceptions/mem_abort_user/enable
echo 1 > options/userstacktrace
echo<