【发布时间】:2016-11-05 10:41:40
【问题描述】:
我在 pthread 库中发生了系统性随机崩溃(间接使用):
` Mutex -> __ .__ date owner == 0 ' 失败。
我可以禁用这个断言吗?我更喜欢带有核心生成的简单崩溃来简化调试。有了这个断言就很难理解崩溃点。
我已尝试 add_definitions (-DNDEBUG) 到我的 CMakeList,但断言仍然存在。
【问题讨论】:
-
替代方案:断言失败是否可能触发核心转储?
-
我很确定它在断言时确实会崩溃,但 OP 希望它会在 OP 的代码实际第一次调用 UB 时崩溃。这通常很难做到,但 valgrind、ASan、UBSan 等工具有时会有所帮助。
-
@R.,它正在崩溃,但它没有产生核心转储。 OP 想要一个核心转储,以便他们可以获得堆栈跟踪和/或检查断言时存在的数据结构。也就是说,这些工具也可能有用。
-
是否可能只是禁用了核心转储?如果程序开始在 gdb 下运行会发生什么?大多数现代系统默认禁用核心转储,因为它们的创建是安全漏洞的永久来源。
-
由于
assert引发SIGABORT,失败的断言通常会导致核心转储。我猜这已经完成了,并且您的系统上根本没有启用此信号的核心转储。
标签: c crash pthreads assertion