I have a single-threaded application in NET6.0 with VS2022. With the debugger, I randomly get this exception:

System.ObjectDisposedException: ‘Safe handle has been closed. Object name: ‘SafeHandle’.’

It happens only with my class that wraps a SerialPort. I have an equivalent class which wraps TcpClient and has no issue.

Here’s an example code

class SerialDriver
{
    byte[] buf;
    SerialPort port;

    void Connect(); // port.Open() + a few writes and reads
    void Disconnect(); // port.Close()
    int Read(); // Synchronous read
}

void Main()
{
    SerialDriver s = new SerialDriver("COM5");
    s.Connect();

    // Using the debugger from here on causes SafeHandle Exception,
    // even on lines that do not referecnce the serial port at all.

    for(int i = 0; i < 10; i++)
    {
        int len = s.Read();
        Thread.Sleep(10000);
    }
    s.Disconnect();
}
  • “Step Over” or “Step Into” – About 2 or 3 clicks before exception
  • “Continue” between breakpoints – About 7 to 10 before exception
  • No Breakpoints, or no debugger – No exception.

Has anyone encountered an issue with the debugger?

8