调试

时间:2015-07-03 13:36:20

标签: c# multithreading sockets debugging access-violation

我在调试应用程序时得到AccessViolationException,但在没有附加调试器的情况下将此应用程序作为发行版运行时不会出现此异常。该应用程序是一个非常线程密集(最多10000+)的网络服务器(tcp / socket)。

应用程序已经整个晚上运行编译为发布,没有附加调试器并且负载很重。事实上,如果没有连接调试器,应用程序就不会崩溃。

当我使用附加的调试器运行编译为Release的应用程序时,我得到AccessViolationException - 异常(有时)。只是在没有任何提示发生此异常的情况下抛出此异常。当我在Visual Studio中出现的异常框中按“确定”,然后导航到发生异常的线程。我无法在那里看到任何代码或堆栈跟踪:

Thread with exception has no memory-location. (线程#186840没有内存位置。)

这是我的(减少的)测试程序:example-code。 (你应该有足够的ram和cpu,你应该将其编译为release。首先启动服务器应用程序,然后使用客户端应用程序生成负载。)

现在我的问题:如何调试此类错误?在调试这些线程密集型程序时,有没有人知道.NET中的错误?

我正在使用Visual Studio 2013 Update 4.该项目是Any Cpu; .NET 4.0 C#项目。我已经安装了所有Windows更新补丁,并在Windows 8.1上运行它。 JIT编译器将代码编译为x64。

0 个答案:

没有答案