C# 调试时没有特定代码位置的AccessViolationException
我在调试应用程序时收到一个C# 调试时没有特定代码位置的AccessViolationException,c#,multithreading,sockets,debugging,access-violation,C#,Multithreading,Sockets,Debugging,Access Violation,我在调试应用程序时收到一个AccessViolationException,但在没有附加调试器的情况下作为发行版运行此应用程序时,不会收到此异常。该应用程序是一个线程密集型(高达10000+)网络服务器(tcp/socket) 该应用程序昨晚运行了一整夜,编译为发行版,没有附加调试程序,并且负载很重。事实上,如果没有附加的调试器,应用程序不会崩溃 当我使用附加的调试器运行编译为Release的应用程序时,我会得到一个AccessViolationException-异常(有时)。该异常只是在没有
AccessViolationException
,但在没有附加调试器的情况下作为发行版运行此应用程序时,不会收到此异常。该应用程序是一个线程密集型(高达10000+)网络服务器(tcp/socket)
该应用程序昨晚运行了一整夜,编译为发行版,没有附加调试程序,并且负载很重。事实上,如果没有附加的调试器,应用程序不会崩溃
当我使用附加的调试器运行编译为Release
的应用程序时,我会得到一个AccessViolationException
-异常(有时)。该异常只是在没有任何提示的情况下被抛出,该异常发生在何处。当我在Visual Studio中的“显示异常”框中按“确定”,然后导航到发生异常的线程时。我在那里看不到任何代码或堆栈跟踪:
(线程186840没有内存位置。)
这是我的(简化)测试程序:。(您应该有足够的ram和cpu,并将其编译为发行版。首先启动服务器应用程序,然后使用客户端应用程序生成负载。)
现在我的问题是:如何调试此类错误?在调试此类线程密集型程序时,有人知道.NET中有错误吗?
我正在使用Visual Studio 2013更新4。该项目是一个
任何Cpu
.NET4.0
C
项目。我已经安装了所有windows update修补程序,并在windows 8.1上运行此修补程序。JIT编译器将代码编译为x64。线程密集型(高达10000+),除非您的计算机上有10000多个内核,否则您可能需要重新考虑您的设计。你的CPU可能花在上下文切换上的时间比工作上的时间要多。这不是重点。线程大多在等待阻止套接字调用。在没有附加调试程序的情况下作为发行版运行此应用程序
-这可能吗?每个线程都有自己的套接字吗?@jmc每个编译为发行版然后在资源管理器中双击启动的应用程序都在没有附加调试程序的情况下启动。