2

我有一个用 C# 编写的桌面应用程序。它正在尝试管理套接字连接并失败。如果将同一应用程序附加到 Visual Studio 调试器,则它是成功的。

怎么调试?

4

7 回答 7

5

我会说连接调试器的时间问题也会稍微减慢代码速度,这可能意味着没有发生竞争条件。

要调试它,请尝试向您的应用程序添加一些日志记录代码,我个人使用log4net

当您在 c# 中编码时,您不应该遇到 malloc 等问题。

如果您正在运行一个网络应用程序,那么 VS 中的 cassini 网络服务器和您要部署到的网络服务器也可能存在差异。

于 2008-09-23T12:10:03.333 回答
1

通常,时间问题。是否涉及线程?如果是 C/C++,那么由于内存管理错误的行为方式,可能有很多原因。

于 2008-09-23T12:07:02.047 回答
0

在编译器下运行而不是独立运行时,您可能有默认值不同的变量。如果涉及线程,竞争条件可能是另一个想法。

如果您通过 malloc 或 new 分配 RAM,请确保在使用之前正确初始化内存。

于 2008-09-23T12:09:54.770 回答
0

这是一个典型的计时例子。

如果它在调试器中工作,那么这意味着您必须稍微重构您的代码来处理这个问题。

现在,如果您的应用程序是一个服务器套接字,它接收来自客户端的连接并尝试为每个连接生成一个线程,您可能必须考虑使用 select() 来管理一个线程中的连接。

于 2008-09-23T12:15:34.227 回答
0

我们实际上遇到了类似的问题。时机是其中的关键部分。以及在代码中加入无操作(主要区别与调试代码)。

使用套接字编程,似乎使用 VisualStudio.Net 进行调试就像进行了额外的 Application.DoEvents() 调用。我们发现,除非我们通过调用 Application.DoEvents() 允许组件呼吸(例如处理自己的事件),否则我们的某些东西会失败(非调试)。

于 2008-09-23T13:21:40.557 回答
0

当 Visual Studio 附加到您的应用程序时,CLR 和 JIT 具有细微的运行时差异以启用调试。例如垃圾收集是不同的。

http://stupiddumbguy.blogspot.com/2008/05/net-garbage-collection-behavior-for.html

于 2008-11-20T07:29:23.127 回答
0

这可能是因为您正在调试器中查看具有副作用的属性。虽然这里的其他答案更有可能......

于 2008-11-20T07:59:31.973 回答