Lær*_*rne 16 c++ multithreading deadlock threadpool c++11
我正在尝试调试很少有死锁的自定义线程池实现.所以我不能使用像gdb这样的调试器,因为我在遇到死锁之前点击了100次"启动"调试器.
目前,我在shell脚本的无限循环中运行线程池测试,但这意味着我看不到变量等等.我正在尝试std::cout数据,但这会减慢线程并减少死锁的风险,这意味着我可以在获取消息之前等待1小时的无限.然后我没有得到错误,我需要更多的消息,这意味着再等一个小时......
如何有效地调试程序,以便它一遍又一遍地重启直到它死锁?(或者我应该用所有代码打开另一个问题以获得一些帮助?)
先感谢您 !
奖金问题:如何检查一切顺利std::condition_variable?您无法确定哪个线程处于睡眠状态,或者条件是否出现竞争wait条件.
Mac*_*tka 18
有两种基本方法:
gdb program -ex 'run <args>' -ex 'quit'应该在调试器下运行程序然后退出.如果程序仍然以某种形式存在(段错误,或者您手动打破),则会要求您确认.gdb <program> <pid>以附加到正在运行的程序 - 只需等待死锁然后附加即可.当附加的调试器导致更改时间并且您无法再重置错误时,这尤其有用.通过这种方式,您可以在循环中运行它并在喝咖啡时等待结果.顺便说一句 - 我发现第二种选择更容易.
| 归档时间: |
|
| 查看次数: |
6095 次 |
| 最近记录: |