目前我使用dbghelp库遍历某个进程线程的堆栈(使用GetThreadContext()和StackWalk64())并仅收集每个帧包含的返回地址。
但是,这样做的开销对于系统需求来说太大了 - 总时间是 apx。每次堆栈步行 5 毫秒(10-15 帧)。这次包括 GetThreadContext() 和调用 StackWalk64() 以获取所有帧的循环。
无论如何,我必须找到一种更快的方法。任何人都知道我该怎么做?
编辑:
有人知道 ETW(Windows 事件跟踪)机制吗?
如果是这样,我如何跟踪在某个时间段内发生的所有上下文切换?是否有一个事件提供者在每个上下文切换上发布一个事件?