2010-07-08 71 views
1

我们有一个非托管C++ TCP服务器应用程序,作为Windows服务运行,在Win2003服务器上运行几天后会无声无息地崩溃。没有Dr. Watson日志文件生成(Dr. Watson日志没有问题,因为它捕获同一应用程序中的其他崩溃)。由于缺乏Dr. Watson日志文件,我们无法进一步进行调试。Visual Studio 2008 C++应用程序中的无声崩溃

TCP服务器应用程序是一种HTTP处理器。它连接到广泛的网络服务器和处理数据。

有人可以指导我做些什么来调试无声崩溃..有超过1000个用户连接到此服务器在任何时刻,因此它不可能在调试模式下运行相同。这个崩溃是不可复制的,并且在6个服务器中的一个服务器上在5-10天内发生一次..

任何可以帮助调试这些无声崩溃的工具。该应用程序是一个纯粹的C++应用程序没有任何MFC或STL ..

在此先感谢。

克里希纳

+0

我明白堆栈损坏是可能的原因之一,但如何调试这个时,我不能附上windbg(由于重负载在服务器上时,问题是重新创建)。 – Krishna 2010-07-08 17:13:10

+0

STL是纯粹的C++。 http://stackoverflow.com/questions/2444514/why-do-programmers-sometimes-refer-to-c-stl-like-its-a-separate-language – 2010-07-08 17:17:28

+0

我不知道它是否适用于本机代码,或者如果它是特定于这些应用程序的,但是当我测试过的某些应用程序崩溃时,我会检查事件日志。 如果你想改变源代码,你也可以创建一个未处理的异常处理程序。 – 2010-07-08 17:26:59

回答

2

我最后一次有这样的无声崩溃的问题,这是因为C runtime parameter validation.,默认情况下只是调用TerminateProcess没有任何其他善良(取决于您链接到其中msvcrt*.dll版本上)。如果这是你的问题的原因,你可以通过调用_set_invalid_parameter_handler并给出一个处理程序来避免它,或者调用DebugBreak(强制崩溃)或什么也不做,从而允许将错误代码返回给调用者。上面的链接中的详细信息。