【发布时间】:2011-07-06 08:18:57
【问题描述】:
在开发应用程序的过程中,我们特别遇到了一个非常讨厌的错误。症状很简单,就是进程消失了。日志只是突然结束,没有崩溃转储或任何东西可以找到,不存在僵尸进程。 Dr.Watson 没有发现任何东西让我们无影无踪。
该错误重现起来并不简单,重现此错误平均需要 3-4 小时,重复执行相同的操作。因此,某处存在某种竞争条件。我们有处理 SEH 和正常异常的特殊函数,所以这些都不应被忽视。
调试必须在特殊的计算机上进行,因为它运行在非常专业的硬件上。所以只有远程调试可用。并且当连接远程调试时,C++ builder 不会注意到应用程序丢失,当我们尝试对不存在的进程进行任何调试时会崩溃和烧毁。
我们在这款软件中使用了多种技术:
- OpenGL
- Directshow + 一些 COTS 过滤器
- COM/DCOM
- 串行 COM 端口与专用硬件通信
- C++ Builder(使用与 VC++ 不同的堆栈帧)
所以,如您所知,我在这里没有太多工作要做。我现在正在做的是,我试图通过登录代码中的不同位置来缩小范围,以查找代码中是否有某个特定点发生错误。我还试图删除我正在执行的操作的尽可能多的方面,以使案例尽可能简单。但这是一个非常复杂的操作,这个过程需要很多时间,而且时间(像往常一样)是一种稀缺资源。
我想知道是否有人对我有好的提示,无论是原因(通常是什么导致进程在没有任何通知的情况下停止)或调试这种难以捉摸的失败的技术?
【问题讨论】:
-
我在此将此类虫子命名为“百慕大三角虫”。
-
您在哪个版本的 Windows 上运行它?
-
这是在定制的 Embedded XP 上运行的。
-
@caf hehe,我实际上将这个错误命名为 Ninja bug,因为它会杀死进程并消失得无影无踪:D
标签: c++ c windows debugging c++builder