【问题标题】:Disable c assertion in pthread library在 pthread 库中禁用 c 断言
【发布时间】: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


【解决方案1】:

不,你也不想。断言不是你的问题,禁用它只会让失控的错误行为传播得更远。您破坏了不属于您的内存这一事实是您的问题。使用 valgrind 或类似工具来尝试追查你做错了什么,而不是希望你可以假装它没有发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 2010-11-09
    • 2016-03-13
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多