0

我已经构建了一个独立的控制台应用程序,该应用程序仅在安装在 Windows Server 2003 Enterprise Edition Service Pack 2 测试机器上时才会引发间歇性 StackOverFlow 异常。代码过于复杂,无法发布,但详细信息如下:
源代码是 C# VS 2010。源代码
中没有递归调用,但它确实使用了工作线程。
发生 StackOverflowException 时,正在运行的进程不会终止。
当异常发生时,它将始终在同一位置发生。
发生异常时,几乎总是在代码尝试跨 COM 边界初始化时发生,即: CAsset asset = new CAsset() 其中 CAsset 是用 C++ 编写的 COM 对象。
用调用 System.Activator.CreateInstance 替换直接初始化

            System.Type assetType = System.Type.GetTypeFromProgID("GDMTCommon.HansenAsset");
            object activated = System.Activator.CreateInstance(assetType);
            asset = activated as CHansenAsset;

不能解决问题,但它确实将故障点移动到代码中的不同位置。上面的代码也没有抛出错误,但是直接转换后资产变量为空。此实例是在初始化 COM 对象时未发生故障的一次。
最令人困惑的行为是我可以在测试机器上的两组不同的源数据上运行该工具,对于一组源数据,代码将运行完成而不会出错,而另一组代码则失败。
我在两台不同的 Windows 7 测试机器上安装了相同的工具,但无法在任何一台机器上重现错误。我还在 Windows Server 2003 Standard Edition Service Pack 2 测试机器上安装了该工具,但无法在该机器上重现错误。
大量搜索发现了其他几个问题,即在一个操作系统上运行的代码在安装在 Windows Server 2003 上时开始抛出 StackOverflowExceptions,但我没有看到任何明确的解决方案。
我发现这篇知识库文章似乎描述了我的问题: http:
//support.microsoft.com/kb/915750
但根据文章,问题已在 Service Pack 2 中得到解决,并且我已验证 Service Pack 2 已安装在测试机上。
任何帮助将不胜感激。
问候,
杰伊

4

1 回答 1

0

运行 Windows 更新并将所有可用更新应用到机器解决了堆栈溢出问题。仍然不确定是什么首先导致了他们。由于这是我无法访问的客户端计算机,因此我不得不等待他们应用更新。

于 2012-11-14T21:50:08.973 回答