我最初调整到的最困难的事情之一就是我第一次使用C语言编写C语言的强烈经验.我习惯于确切地知道下一行代码将会是什么,并且我的大多数调试技术都围绕着这种期望.
在C中使用pthread进行调试有哪些好方法?您可以在没有任何附加工具,使用的工具或其他任何可以帮助您调试的方法的情况下建议个人方法.
PS我在linux中使用gcc进行C编程,但不要让它限制你的答案
Valgrind是查找竞争条件和pthreads API误用的绝佳工具.它保留了程序存储器(可能还有共享资源)访问的模型,并且即使在bug是良性的时候也会检测丢失的锁(这当然意味着它将在以后的某个时刻完全出乎意料地变得不那么温和).
要使用它,请调用valgrind --tool=helgrind
,这是它的手册.还有valgrind --tool=drd
(手动).Helgrind和DRD使用不同的模型,因此它们可以检测重叠但可能不同的错误集.也可能出现误报.
无论如何,valgrind已经为我节省了无数个小时的调试(虽然不是全部).
调试线程程序会使您感到惊讶的一件事是,您经常会发现错误更改,甚至在添加printf或在调试器中运行程序时(通常称为Heisenbug)也会消失.
在线程程序中,Heisenbug通常意味着您有竞争条件.一个优秀的程序员将寻找与顺序相关的共享变量或资源.一个蹩脚的程序员会尝试使用sleep()语句盲目修复它.