Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
Can Visual Studio (or any other tool) interpret an address as a beginning of a call stack (boost context)?
是否可以告诉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
有点太低级了,无论如何都不能直接使用,除非你有没有提到的特殊需求。
相关文章:
- 什么时候调用组成单元对象的析构函数
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 构造函数解释为函数调用,并显式跳过移动构造函数
- 函数调用解释为声明
- C 构造函数中无法解释的调用
- 你能解释一下如何调用类的方法吗?
- 从 Tableau 调用 Rcpp 函数时出错.如何解释和调试 Rserve 日志
- 从模板类调用函数时形成的无限循环,请任何人解释
- 临时函数调用的构造被解释为声明
- 如何解释此调用堆栈信息
- 如何解释模板函数调用的 gcov 结果
- 解释此并发中的"="符号参数::任务调用
- 我的函数调用出错了,有人能解释一下原因吗
- 对类构造函数的不可解释调用会生成"matching function error"
- 调用返回类型不完整的方法和无法解释的模板解决方案
- 如何将这个c++表达式解释为调用
- 复制构造函数没有被调用,有人能解释函数的returnin值是如何工作的吗
- 有人可以解释调用函数时 foor->bar 的使用吗?
- 对what()调用的解释
- 请解释析构函数调用的顺序