简体   繁体   中英

Debug.WriteLine locks

My program frequently stops with a deadlock. When I do a break-all and look at the threads I see that three threads are stuck in our logging function:

public class Logging
{
    public static void WriteClientLog(LogLevel logLevel, string message)
    {
      #if DEBUG
      System.Diagnostics.Debug.WriteLine(String.Format("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), message)); //LOCK
      #endif
      //...Log4net logging
    }
}

If I let the program continue the threads are still stuck on that line.

I can't see where this can lock. The debug class, string class & datetime class seem to be thread safe.

The error goes away when I remove the #if DEBUG System... #endif code but I'm curious why this behavior happens.

Thread one:

public void CleanCache()
{
    Logging.WriteClientLog(LogLevel.Debug, "Start clean cache.");//Stuck
}

Thread two:

private void AliveThread()
{
    Logging.WriteClientLog(LogLevel.Debug, "Check connection");//Stuck
}

Debug.WriteLine writes logging messages to the attached Trace Listeners attached to the Listeners collection.

One of your trace listeners must have a lock internally which is causing a deadlock. Check your listener code, as it's most likely the culprit.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM