Visual Studio调试器扩展:解决切换栈后的调用栈显示问题
自定义协程场景下VS调试器的栈遍历扩展方案需求
关联问题
- 《替换应用程序的调用栈》
- 《为Visual Studio调试器提供自定义代码的符号支持》
背景概述
我实现了自定义Native代码生成逻辑,采用自定义可执行格式(无PDB文件),已基于Concord库开发Visual Studio调试器扩展,完成了自定义符号解析功能。
代码中包含类Fiber的简化栈协程实现,进入协程时会切换RSP寄存器,导致调试器无法展示完整调用栈——当前仅能显示协程内部的栈帧,丢失了触发协程的C++调用站点。
已尝试方案及问题
由于所有协程最终都会返回原调用站点,我尝试扩展调试器以合并调用栈实现完整展示,但遇到了以下问题:
- 通过
IDkmCallStackFilter接口实现了部分功能,但仅能展示单个帧,且寄存器信息错误 - 尝试
IDkmStackProvider、IDkmSymbolStackWalker等接口,未达到预期效果 IDkmMonitorStackWalk仅针对外部DLL触发,不适用当前场景- 手动栈遍历未找到指定自定义返回地址和寄存器的有效方法
DkmAsyncStackWalkContext因无任务/线程场景,不知如何正确使用
核心需求
寻求在Visual Studio调试器框架中,从提取的oldRSP值(非当前线程栈区域)触发完整栈遍历的可行方案。
内容的提问来源于stack exchange,提问作者Juliean
相关产品推荐
相关产品推荐

