是否可以告诉 Visual Studio(或任何其他主要操作系统上的任何其他工具)将地址解释为调用堆栈的开头?
我想要实现的目标:我们有一个库,它使用 boost
的 make_fcontext
/jump_fcontext
并将这些上下文存储到一个容器,以便暂停一些调用以供以后处理。
我的问题是 - 是否有可能以某种方式调试这些挂起的调用是什么?我想,我可以告诉调试器/工具类似:“这是这个地址,虽然它并不明显,但它实际上指向一个调用堆栈,‘解析’它并像标准调用堆栈一样显示给我”。
不知道这在理论上是否可行,因为我不知道 boost::context
的细节,但它听起来是可以实现的。
有没有人尝试过处理这个问题?
最佳答案
我能想到几种方法,但各不相同。
您可以编写自己的调试引擎以插入 IDE,这将允许手动枚举纤程。 (你可能不想那样做。)
您可以使用
boost::context::fiber
而不是fcontext_t
。在 Windows 上,这些可以使用 win32 纤程实现,因此它们将自动显示在 IDE 中,具有完整的堆栈/局部变量。 (您可能需要更改您的 Boost 配置才能使其正常工作,有关详细信息,请参阅文档。)您可以查看
fcontext_t
结构,获取 EIP 和 ESP,并将它们复制到您的寄存器中;到那时,处理器将不再认为它是作为纤程执行的。 (这很可能不会很好地工作。)
我个人会选择第二种方法。 fcontext_t
级别太低,无法直接使用,除非您有未提及的特殊需求。
关于c++ - Visual Studio(或任何其他工具)能否将地址解释为调用堆栈的开始( boost 上下文)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070319/