【问题标题】:Helgrind stops program during runtimeHelgrind 在运行时停止程序
【发布时间】:2019-01-31 06:24:31
【问题描述】:

Helgrind 在运行时冻结。退出运行必须应用 CTRL+C (SIGINT)。

我编写了一个可以正确执行的程序,如果没有使用--tool=helgrind 以通常的方式运行,valgrind 不会报告任何程序。但是当使用 helgrind 时,程序会在运行时停止。

我没有发现任何导致 helgrind 出现这种行为的典型问题。有任何提示吗?我使用vgdb 也找不到任何问题。

编辑:该程序使用信号量和 pthreads。

编辑:添加一堆 fprintf 输出使 helmgrind 工作得很好。为什么呢?

【问题讨论】:

  • 你能去掉你的代码来提供一个 {mcve] 来证明你的问题吗?
  • 很难做到,因为程序很大,但我只是注意到,如果我添加一些 fprintf 函数,程序可以正常工作。所以我想我出于某种原因需要刷新一些输出......
  • 当应用程序在 hlgrind 下冻结时,您使用 vgdb 观察到什么?你的线程在做什么?

标签: c pthreads valgrind


【解决方案1】:

找到答案了。

使用信号量的值作为条件变量非常慢。因此,由于 sem_post/sem_wait 是原子操作,并且 helgrind 具有“较慢的检查”(非原子),因此我的程序更新信号量的方式更快,然后 helgrind 重新检查信号量。并因此冻结了地狱。所以线程计数器或其他类型的条件变量解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2018-10-18
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多