调试多头程序

Mic*_*ick 2 c++ debugging multithreading visual-studio

我多年来一直是C程序员,我最喜欢的"调试器"一直是printf()函数 - 我只是在绝对强制时使用visual studio的调试器,因此从未非常精通使用它.最近我不得不修改一个从C到C++的程序(虽然当然printf仍然工作正常)并且程序的一部分现在被分到多个线程(一个用于多核机器上的每个核心)以使程序运行快点.现在我毫无疑问会遇到像死锁一样的尴尬的多线程相关错误,我想知道我可以转向的调试方法.visual studio(2008)是否有我可以合理需要的一切来帮助我解决线程相关的错误?我现在应该花点时间学习如何使用某些第三方调试器吗?我能用旧的printf解决大多数问题吗?

我是否可以编写代码,如果等待进入临界区,则会打印类似"线程X等待进入...但因为被线程Y使用而被阻止"的代码?

Bri*_*sen 10

Visual Studio在某种程度上支持线程调试.通过线程窗口,您可以选择线程,挂起和恢复线程等.当您在线程之间切换时,调用堆栈窗口会相应更新,以便您可以检查每个线程正在执行的操作.您还可以将断点限制为特定线程.

如果你想要一个替代的WinDbg(它是微软的免费Debugging Tools for Windows软件包的一部分)提供了很多选项,但是有一个更深奥的用户界面.

至于使用printf,存在同步输出的问题.如果你不这样做,你输出很可能是胡言乱语.如果您同步它,您基本上会更改应用程序的并发性,这可能会也可能不会影响您尝试解决的问题.