我暂时面对这个问题并且不知道如何解决它。
该应用程序实际上是一个用.NET Framework 4.6.1编译的VB编译的DLL,用于通过TCP端口进行消息交换。
使用.NET framework 4.5在Win2012R2中加载并运行DLL。当TCP端口连接时,DLL运行良好而没有问题。
但是,重试打开TCP端口一段时间后,DLL崩溃了(在我记录的日志文件中,重试次数达到了1000次以上)。
我试图寻找根本原因,我发现{{1}}是导致崩溃的主要原因。在其他文章中,我发现了一些信息,但似乎与我的相似...
以下是Windows事件日志供您参考。 我想知道是否有人遇到过这个问题并解决了,请告诉我。
日志名称:申请
来源:申请错误
日期:4/5/2018 2:23:48上午 事件编号:1000
任务类别:(100)
等级:错误
关键词:经典
用户:N / A
计算机:Server11
说明:
错误应用程序名称:MyProgram.exe,版本:7.8.0.30,时间戳:0x5984af0d
错误模块名称:clr.dll,版本:4.7.2053.0,时间戳:0x58fa6bb3
例外代码:0xc00000fd
故障偏移:0x0045138d
错误进程id:0x1e04
故障应用程序启动时间:0x01d3cc2fb84774be
错误的应用程序路径:MyProgram.exe
错误模块路径:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ clr.dll
报告编号:ef43e05d-382c-11e8-80bf-000c291e7679
错误包全名:
错误的包相关应用程序ID:
答案 0 :(得分:2)
从外观上看,异常代码0xc00000fd
是 StackOverflow Exception 。
这可能是因为递归或许多其他问题。但是我的钱是递归的。
由于它可能是 StackOverflow Expception ,我认为您需要调试该过程才能正确捕获它。
从2.0开始,StackOverflow异常只能被捕获 以下情况。
- CLR正在托管环境中运行,其中主机特别允许处理StackOverflow异常
- 用户代码抛出stackoverflow异常,而不是由于实际的堆栈溢出情况(参考)
来源C# catch a stack overflow exception
这也值得一读When can you catch a StackOverflowException?
简而言之,我怀疑这是.net自身的错误,很可能是由于你正在做什么(或其他人),因为你没有展示代码我们可以假设你/他们正在做什么出了点问题。
一些好的做法是
TcpClient
或使用using
声明TcpClient
同时执行操作,请确保您没有使用Parallel.For/ForEach
或任何不适合 IO Bound 操作的内容,而是使用async
/ await
模式(虽然这可能不是问题,但它的建议很好)。