Visual Studio(或任何其他工具)可以将地址解释为调用堆栈的开头(增强上下文)吗?

Kir*_*rov 5 c++ debugging boost context-switch

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


我想要实现的目标:我们有一个库,它使用boost's make_fcontext/jump_fcontext并将这些上下文存储到容器中,以便暂停一些调用以供以后处理。

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

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

有人尝试过解决这个问题吗?

Sne*_*tel 2

我能想到几种不同的方法,但都不尽如人意。

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

  • 您可以使用 aboost::context::fiber代替fcontext_t。在 Windows 上,这些可以使用 win32 光纤来实现,因此它们将自动显示在 IDE 中,并具有完整的堆栈/局部变量。(您可能需要更改 Boost 配置才能使其正常工作,有关详细信息,请参阅文档。)

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

就我个人而言,我会选择第二种方法。fcontext_t无论如何,它的级别太低了,无法直接使用,除非您有未提及的特定特殊需求。