2013-06-17 5 views
0

Я добавил пару точек останова в своем коде, чтобы отслеживать значение двух переменных при достижении. Приложение в основном получает поток данных со скоростью 9600 бод от последовательного порта, сгенерированный микроконтроллером, работающим на частоте 500 Гц, и должен фильтровать сообщения в соответствии с определенными правилами «если» и «если еще», чтобы вырезать символы заголовка и адресовать их другие переменные для использования расчета. Вот код:Visual Studio debug break points freezing app

class Stripper 
{ 
public void Distri (string inComing, out string param1, out string param2, out string param3, out string param4) 
    { 
     string currentRes=""; 
     string currentMot = ""; 
     string temperature=""; 
     string numRPM=""; 
     string f = inComing; 
     if (inComing.Length < 6) 
     { 
      f = ">123456<"; 
     } 
     char firstChar = f[0]; 
     char lastChar = f[f.Length - 2]; 
     bool test1 =(firstChar.Equals('>')); 
     bool test2 =(lastChar.Equals('<')); 
     int messLenght = f.Length; 

     try 
     { 
      if (test1 == true && test2 == true && messLenght <= 10) 
      { 
       f = f.Replace("<", ""); 
       f = f.Replace(">", ""); 

       if (f[0] == 'I') 
       { 
        string _currentRes = f; 
        _currentRes = _currentRes.Replace("I", ""); 
        currentRes = _currentRes; 
       } 

       else if (f[0] == 'M') 
       { 
        string _currentMot = f; 
        _currentMot = _currentMot.Replace("M", ""); 
        currentMot = _currentMot; 
       } 

       else if (f[0] == 'T') 
       { 
        string _temperature = f; 
        _temperature = _temperature.Replace("T", ""); 
        temperature = _temperature; 
       } 
       else if (f[0] == 'N') 
       { 
        string _numRPM = f; 
        _numRPM = _numRPM.Replace("N", ""); 
        numRPM = _numRPM; 
       } 

       else 
       { } 
      } 

      else 
      { } 
     } 
     catch (System.Exception) 
     { 

      throw; 
     } 

     param1 = currentRes; 
     param2 = temperature; 
     param3 = numRPM; 
     param4 = currentMot; 

     } 
     } 
     } 

Проблема я столкнулся довольно странно, и в какой-то момент я был полностью потерян. В основном, с точками разрыва, активными в переменных «f» и «inComing», приложение сразу же не отвечало на запросы и, чтобы заставить его работать, мне пришлось уменьшить скорость потока от серийного до 1/100, вводя задержки. Без точек останова приложение может принимать полный поток данных без каких-либо проблем. Возможно, этот опыт может помочь другим людям в подобных ситуациях. Похоже, что точки останова замедляют процесс довольно резко. Я не думаю, что это имеет какое-то отношение к компьютеру. Я использую это монстр с 16 Гб оперативной памяти и 2,4 ГГц процессором i5. Мне интересно, почему это происходит, и есть ли способ избежать такой проблемы, а не использовать точки останова?

+2

вам может создать Logfile как альтернативу точкам останова – WiiMaxx

+0

Спасибо за совет. Это, безусловно, отличная альтернатива, но не дает реального видения происходящего. Тем не менее, я не думал об этом раньше, и я попробую. – FeliceM

+0

вы также можете написать свое окно вывода в VS, но я не знаю, как это сделать. Теперь я могу это сделать: D – WiiMaxx

ответ

1

Я нашел его на быстрый поиск Debug.WriteLine()
является вещь, чтобы записать на свой VS Output Window

так что вы будете иметь возможность получить значения ваш реального времени

Смотри также это link

+0

Спасибо. Очень ценится, но все же я не понимаю, почему точки разлома вызывают такую ​​проблему. – FeliceM

+0

может быть основан на «нормальном» использовании его, поэтому он пытается получить всю информацию о ценности, вероятно, за отражение (но я не знаю) – WiiMaxx