C++包含了一个线程库,提供了多线程和线程间同步的机制。多线程的C++程序很常见,因此考虑多线程程序调试时的特殊情况非常重要。多线程程序的bug往往因为操作系统调度中时序的不同而引起,很难重现。因此,调试多线程程序需要采用一套特殊的技术:
  (1)使用调试器:调试器很容易诊断某些多线程问题;例如死锁。出现死锁时,调试过程会进入调试器,检查不同的线程。在调试器中,可以看到哪些线程被阻塞,它们在哪行代码被阻塞。将这些信息与跟踪日志相比较,可以看出程序是如何进入死锁情形的,这足以解决死锁。
  (2)使用基于消息的调试:调试多线程程序时,基于消息的调试可能比使用调试器更有效。在程序中的临界区之前和之后,以及获得锁之前和释放锁之后添加调试语句。基于消息的调试对观察竞争条件极其有效,但添加日志语句会轻微改变运行时时序,这可能会隐藏bug。
  (3)插入强制休眠和上下文切换:如果一致地重现问题有苦难,或者对问题发生的根源有感觉但是想要验证这个根源,那么可以让现场睡眠特定的时间,强制执行特定的调度行为。在释放锁之前休眠几秒钟,或对某个条件变量发出信号之前休眠几秒钟,或在访问共享数据之前休眠几秒钟,可能表现出竞争条件(如果不休眠则可能无法检测到)。如果通过这个调试技术找到问题的根源,那么必须将这个问题修复,这样在移除了这些强制休眠和上下文切换之后,代码就能正常工作。把这些强制休眠和上下文切换留在程序中而“解决问题”的方法是错误的。
  (4)核查代码:核查线程同步代码常常有助于解决竞争条件。不可能反复尝试已发生的情形,直到看出该情形是如何发生的。在代码注释中记下这些“证据”是无害的。另外,请同事与自己一起调试,他可能会看到自己忽略的东西。

聊天记录

★关于WorkWin公司电脑监控软件★

WorkWin的使命是打造Work用途的Windows 电脑系统,有效规范员工上网行为,让老板知道员工每天在做什么(监控包括屏幕、上网在内的一举一动),限制员工不能做什么(禁止网购、游戏、优盘等)。

WorkWin基于纯软件设计,非常容易使用,无需添加或改动任何硬件,使用一台管理机监控全部员工机电脑。历经南京网亚十余年精心打造,此时此刻每天都有成千上万企业电脑正在运行WorkWin,选择WorkWin选择“赢”。

WorkWin介绍

WorkWin监控首页 短视频讲解 下载免费试用版

版权所有,南京网亚计算机有限公司 。本文链接地址: 调试多线程程序