在pthread库中禁用c断言

在pthread库中禁用c断言,c,crash,pthreads,assertion,C,Crash,Pthreads,Assertion,我在pthread库中遇到系统性随机崩溃(间接使用): `Mutex->.\uuuuuuuu日期所有者==0'失败。 我可以禁用此断言吗?我更喜欢一个简单的崩溃和核心生成,以简化调试。使用这种断言很难理解崩溃点 我已尝试将定义(-DNDEBUG)添加到我的CMakeList中,但断言仍然存在。否,您不想这样做。断言不是您的问题,禁用它只会让失控的错误行为传播得更远离其原因。事实上,你已经破坏了不属于你的记忆,这是你的问题。使用valgrind或类似的工具来追踪你做错了什么,而不是希望你可以假装它

我在pthread库中遇到系统性随机崩溃(间接使用):

`Mutex->.\uuuuuuuu日期所有者==0'失败。

我可以禁用此断言吗?我更喜欢一个简单的崩溃和核心生成,以简化调试。使用这种断言很难理解崩溃点


我已尝试将定义(-DNDEBUG)添加到我的CMakeList中,但断言仍然存在。

否,您不想这样做。断言不是您的问题,禁用它只会让失控的错误行为传播得更远离其原因。事实上,你已经破坏了不属于你的记忆,这是你的问题。使用valgrind或类似的工具来追踪你做错了什么,而不是希望你可以假装它没有发生。

不,你不想这样做。断言不是您的问题,禁用它只会让失控的错误行为传播得更远离其原因。事实上,你已经破坏了不属于你的记忆,这是你的问题。使用valgrind或类似的工具来尝试追踪你做错了什么,而不是希望你可以假装它没有发生。

备选方案:断言失败是否可能触发核心转储?我很确定它确实在断言时崩溃,但OP希望它会在OP的代码实际第一次调用UB时崩溃。这通常很难做到,但像valgrind、ASan、UBSan等工具有时会有所帮助。@R,它正在崩溃,但它不会产生核心转储。OP需要一个核心转储,以便获得堆栈跟踪和/或检查断言时存在的数据结构。也就是说,这些工具可能也很有用。是否可能只是禁用了核心转储?如果程序首先在gdb下运行,会发生什么?大多数现代系统默认禁用核心转储,因为它们的创建是安全漏洞的永久来源。由于
assert
引发
SIGABORT
,失败的断言通常会导致核心转储。我想这已经完成了,并且这个信号的核心转储在您的系统上根本没有启用。备选方案:断言失败是否可能触发核心转储?我很确定它确实在断言时崩溃,但OP希望它会在OP的代码实际第一次调用UB时崩溃。这通常很难做到,但像valgrind、ASan、UBSan等工具有时会有所帮助。@R,它正在崩溃,但它不会产生核心转储。OP需要一个核心转储,以便获得堆栈跟踪和/或检查断言时存在的数据结构。也就是说,这些工具可能也很有用。是否可能只是禁用了核心转储?如果程序首先在gdb下运行,会发生什么?大多数现代系统默认禁用核心转储,因为它们的创建是安全漏洞的永久来源。由于
assert
引发
SIGABORT
,失败的断言通常会导致核心转储。我想这已经完成了,这个信号的核心转储在您的系统上根本没有启用。