Kir*_*rov 5 c++ debugging boost context-switch
是否可以告诉 Visual Studio(或任何其他工具,甚至在任何其他主要操作系统上)将地址解释为调用堆栈的开头?
我想要实现的目标:我们有一个库,它使用boost's make_fcontext/jump_fcontext并将这些上下文存储到容器中,以便暂停一些调用以供以后处理。
我的问题是 - 是否可以以某种方式调试这些挂起的调用是什么?我想,我可以告诉调试器/工具:“这是这个地址,虽然它不明显,但它实际上指向一个调用堆栈,‘解析’它并像标准调用堆栈一样向我显示它”。
不知道理论上是否可行,因为我不知道boost::context细节,但听起来是可以实现的。
有人尝试过解决这个问题吗?
我能想到几种不同的方法,但都不尽如人意。
您可以编写自己的调试引擎插入 IDE,这将允许手动枚举光纤。(你可能不想这样做。)
您可以使用 aboost::context::fiber代替fcontext_t。在 Windows 上,这些可以使用 win32 光纤来实现,因此它们将自动显示在 IDE 中,并具有完整的堆栈/局部变量。(您可能需要更改 Boost 配置才能使其正常工作,有关详细信息,请参阅文档。)
你可以查看fcontext_t结构体内部,获取 EIP 和 ESP,并将它们复制到你的寄存器中;那时,处理器将不再认为它正在作为光纤执行。(这很可能不会很好地工作。)
就我个人而言,我会选择第二种方法。fcontext_t无论如何,它的级别太低了,无法直接使用,除非您有未提及的特定特殊需求。
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |