【发布时间】:2017-03-05 05:06:40
【问题描述】:
我在 Windows 2008R2 上有一个使用 C++ 的进程,其中有几个线程。在进程启动期间,其中一个线程有可能退出。我没有办法检测会发生什么,有什么建议吗?
根据我的调查,线程无异常退出。访问空指针可能会导致类似的问题,但我在此过程中没有找到这样的位置。其实进程直接crash应该比较好,然后我可以得到一个dump文件;但什么也没发生,只有一个线程退出。
我曾尝试过工具用户模式进程转储程序,但它无法在该进程正在运行的 Windows 版本上运行。 我曾尝试使用工具进程监视器来检查线程退出事件,但是当我尝试通过一次又一次地启动进程来重现此问题时,进程监视器会抛出异常。
提前致谢。
【问题讨论】:
-
反问:如果没有现成的工具,你认为你能编写自己的工具吗?
-
你能在线程函数中添加一些代码,记录这个函数的进入和退出吗?
-
您是否尝试通过调试器启动您的进程?您应该以这种方式获取线程退出代码。
-
stackoverflow.com/questions/7272093/… 详细介绍了多线程程序中未处理的异常。共识是整个程序终止。这意味着您的线程可能以某种方式运行到最后并正常退出。
-
边栏:我曾经在多线程 C# Windows 服务中发现一个奇怪的情况,其中一个线程正在执行
Directory.GetFiles()。当时我们的网络有点不稳定,在通话过程中,带有该目录的服务器从网络上掉线了。那个线程停止了,再也没有恢复活力,但程序和所有其他线程都运行良好。它具有退出日志记录逻辑,但我们没有在日志中看到这一点。这是一个生产系统,因此支持人员不会让我们排除故障 - 他们重新启动了服务,但我们无法重现。
标签: c++ windows multithreading