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

标签 c++ debugging boost context-switch

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


我想要实现的目标:我们有一个库,它使用 boostmake_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/

相关文章:

c++ - 有没有办法列出所有共享内存对象的名称?

java - Appengine 调试 TagLibConfiguration (java jetty)

c++ - *** 检测到 glibc *** ./a.out : double free or corruption (out): 0xbfe69600 ***

javascript - 谷歌浏览器不会在调试器中保存我的代码更改

c++ - 如何在 Windows 上构建 x64 Boost 库?

python - Boost.Python 返回引用现有 c++ 对象的 python 对象

c++ - 我们可以使用c来开发Windows Phone 7.5应用程序吗?

c++ - 指针类型的结构还是指针的结构?

c++ - 在函数之间更新 Sprite 的位置

c++ - tuple_size 的特化不一致