gpt4 book ai didi

c++ - 如何调试罕见的死锁?

转载 作者:IT老高 更新时间:2023-10-28 22:18:47 24 4
gpt4 key购买 nike

我正在尝试调试具有很少死锁的自定义线程池实现。所以我不能使用像 gdb 这样的调试器,因为在出​​现死锁之前我已经点击了 100 次“启动”调试器。

目前,我在 shell 脚本中无限循环运行线程池测试,但这意味着我看不到变量等。我正在尝试 std::cout 数据,但这会减慢线程并降低死锁的风险,这意味着我可以在收到消息之前等待 1 小时。然后我没有收到错误,我需要更多消息,这意味着再等一个小时......

如何有效地调试程序,使其反复重启直到死锁? (或者也许我应该用所有代码打开另一个问题以获得一些帮助?)

提前谢谢你!

额外问题:如何使用 std::condition_variable 检查一切是否正常?您无法真正分辨出哪个线程处于 sleep 状态,或者 wait 条件是否发生竞争条件。

最佳答案

有两种基本方式:

  1. 在调试器下自动运行程序。使用 gdb program -ex 'run <args>' -ex 'quit'应该在调试器下运行程序然后退出。如果程序以一种或另一种形式仍然存在(段错误,或者您手动破坏了它),系统会要求您确认。
  2. 在重现死锁之后附加调试器。例如 gdb 可以运行为 gdb <program> <pid>附加到正在运行的程序 - 只需等待死锁然后附加。当附加的调试器导致时间发生变化并且您无法再重现错误时,这尤其有用。

通过这种方式,您可以循环运行它并在喝咖啡时等待结果。顺便说一句 - 我发现第二个选项更容易。

关于c++ - 如何调试罕见的死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27770896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com