如何在 Socket 上调试这个第一次机会异常?

Posted

技术标签:

【中文标题】如何在 Socket 上调试这个第一次机会异常?【英文标题】:How do I debug this first chance exception on a Socket? 【发布时间】:2014-01-27 04:22:28 【问题描述】:

在我的 C#/WPF/.Net 4.5 程序中,我试图在套接字上执行 Disconnect(),当我这样做时,我得到了一个

“System.Net.Sockets.SocketException”类型的第一次机会异常 发生在 System.dll 中

。 . .在 Visual Studio 输出窗口中。

我的代码包含在 try/catch 中,但它永远不会落在 catch 中。 . .

    try
      
          if (_TCPConn.Connected)
          
              _TCPConn.Shutdown(SocketShutdown.Both);
              _TCPConn.Disconnect(true);   // SocketException
          
      
      catch (Exception e)
      
   . . . 
      

到目前为止,Socket 工作正常 - 它用于与某些制造机械进行通信,并且所有这些东西都可以正常工作。我在有和没有 Shutdown() 的情况下都试过了,结果相同。如果我让我的程序在第一次机会异常之后继续运行,整个程序就会消失并退出调试器。然后输出窗口中的消息只是说

程序“[0xE6C] ProcFacTest.vshost.exe: Managed (v4.0.30319)”有 以代码 0 (0x0) 退出。

我如何找出造成这种情况的原因?

【问题讨论】:

在你的IDE中,点击顶部的Debug,Exceptions,然后展开“Common Language Runtime Exceptions”,找到“System.Net.Sockets”并勾选“Thrown”复选框。再次运行该应用程序,它应该会显示给您。 谢谢!这很有帮助! 【参考方案1】:

第一步是禁用“仅我的代码”。这可能不是必需的,但 IDE 可能会将您的用户代码与系统代码混淆,从而抑制异常。我一般在做异常调试的时候会这样做

工具 -> 选项 -> 调试 取消选中“启用 Justy 我的代码调试”

下一步是告诉 Visual Studio 在引发特定异常时中断。

调试 -> 异常 扩展“公共语言运行时异常”,直到达到“System.Net.Sockets.SocketException” 检查“抛出”这个异常

【讨论】:

在 VS 2017 中,这是在 Debug->Windows->Exception Settings

以上是关于如何在 Socket 上调试这个第一次机会异常?的主要内容,如果未能解决你的问题,请参考以下文章

C++:如何解决在未知点引起的第一次机会异常?

如何设置 Visual Studio 以显示第一次机会异常的堆栈跟踪?

防止输出窗口中的第一次机会异常

首次异常和二次异常

发生了第一次机会异常......我不知道为啥

记一次socket_create()函数耗时异常记录