Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头

Can Visual Studio (or any other tool) interpret an address as a beginning of a call stack (boost context)?

本文关键字:解释 调用 堆栈 boost 开头 上下文 地址 任何 Studio 其他 工具      更新时间:2023-10-16

是否可以告诉Visual Studio(或任何其他主要操作系统上的任何其他工具(将地址解释为调用堆栈的开头?


我试图实现的是:我们有一个库,它使用boostmake_fcontext/jump_fcontext,并将这些上下文存储到一个容器中,以便挂起一些调用以供稍后处理。

我的问题是,有可能以某种方式调试这些挂起的调用吗?我想,我可以告诉调试器/工具这样的东西:"这是这个地址,虽然它不明显,但它实际上指向一个调用堆栈,‘解析’它,并像标准调用堆栈一样向我显示它"。

不知道这在理论上是否可行,因为我不知道boost::context的细节,但听起来是可以实现的。

有人试图处理这个问题吗?

在各种各样的不满意中,我能想到一些方法。

  • 您可以编写自己的调试引擎来插入IDE,这将允许手动枚举光纤。(你可能不想那样做。(

  • 您可以使用boost::context::fiber而不是fcontext_t。在Windows上,这些可以用win32光纤实现,因此它们将自动显示在IDE中,并带有全栈/本地。(您可能需要更改Boost配置才能使其工作,请参阅文档了解详细信息。(

  • 您可以查看fcontext_t结构体内部,获取EIP和ESP,并将它们复制到您的寄存器中;到那时,处理器将不再认为它是作为光纤执行的。(这很可能不会很好地工作。(

就我个人而言,我会选择第二种方法。fcontext_t有点太低级了,无论如何都不能直接使用,除非你有没有提到的特殊需求。