在 C++20 中调试协程

Han*_*mid 7 c++ coroutine c++20

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

The*_*ist 0

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

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

总之:标准调试器没有理由不使用它们。我什至不相信需要向调试器添加太多内容才能使它们支持协程。

  • 使用协程编译的代码在局部变量/函数参数的存储方式上有所不同(取决于实现,它们不在堆栈上)。目前,当我调试带有挂起点的函数时,所有这些变量都无法通过 gdb 访问/不可见。另外,调用堆栈是没有用的(当然)。另一种(更高级别)语言调试器会重新组装带有异步漏洞的调用堆栈,如果我们希望在 gdb 中实现这一点,则必须朝这个方向做一些标准化工作。 (9认同)