【发布时间】:2016-09-08 19:58:08
【问题描述】:
我正在使用来自<cassert> 的assert 来检查我的多线程C++11 程序中的不变量。当断言失败时,我希望能够在断言失败时检查失败函数的状态,以及仍然完整的回溯、变量状态等。问题似乎是SIGABRT 和我的线程之间的一些交互,因为我的std::threads 是pthread_killed,大概是由某些默认信号处理程序引起的。如何在断言失败时暂停 gdb?
以下是我尝试过的一些事情:
在
SIGABRT上设置一个捕捉点。这个问题确实发生了,但为时已晚(__pthread_kill)。定义
__assert_fail,即extern在<assert.h>中声明,并在其上设置gdb断点。这永远不会被捕获,所以大概在调用它之前 pthread 被杀死了 (?)。
这里推荐的方法是什么?
【问题讨论】:
-
@Klaus 感谢您的回答并感谢您的跟进。事实证明这是一个红鲱鱼,实际上真正的答案是根本不需要 gdb 的特殊配置。事实证明,我的 gdb 设置有一个不同的问题,我认为这是没有正确的断点/捕获点的问题,但它一直在工作。我会发布一个澄清的回应。如果有必要,您在断言代码中设置断点是正确的。
标签: c++ multithreading gdb