【问题标题】:Debugging Coroutines in C++20在 C++20 中调试协程
【发布时间】:2020-01-22 23:33:13
【问题描述】:

随着即将到来的 C++20 标准,我们将拥有协程供我们使用。基于协程调试代码的最佳方法是什么?可以做些什么来跟踪呼叫流程?

【问题讨论】:

  • 除了“等到gdb 或类似的支持他们”之外,还有其他答案吗?
  • 基于协程调试代码的最佳方法是什么?可以做些什么来跟踪调用流程?”这不完全取决于如何 一段代码使用它们?我认为调试生成器协程不需要任何特别的东西。如果你在谈论异步,它们只是异步回调的一个精美包装,所以你可以在很大程度上调试它们,就像调试这样的回调一样。
  • printf 就是你所需要的

标签: c++ coroutine c++20


【解决方案1】:

协程不是魔术。他们只是有一个不同的基于隐藏代码的功能流程。 gdb 和其他人已经可以调试它们。

我不确定您是否了解调试器的工作原理,但很简单,在每个汇编代码行中,您的 C++ 源代码中都有一行与之相关联。这些链接称为“调试符号”。您需要问的唯一问题是:是否有与您的协程及其调用流程相关的代码行?答案是肯定的。

总之:标准调试器没有理由不使用它们。我什至不相信有很多东西可以添加到调试器以使它们支持协程。

【讨论】:

  • 使用协程编译的代码在局部变量/函数参数的存储方式上有所不同(取决于实现,它们不在堆栈上)。目前,当我调试带有暂停点的函数时,所有这些变量都无法通过 gdb 访问/不可见。此外,调用堆栈是无用的(当然)。另一种(更高级别的)语言调试器重新组装调用堆栈,其中包含异步漏洞,如果我们希望在 gdb 中这样做,则必须朝这个方向进行一些标准化工作。
猜你喜欢
  • 1970-01-01
  • 2017-09-16
  • 2021-08-27
  • 2020-02-26
  • 2019-10-04
  • 2021-09-03
  • 2019-12-01
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多