如何在 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 上调试这个第一次机会异常?的主要内容,如果未能解决你的问题,请参考以下文章