none
Как найти, где меняется переменная? RRS feed

  • Вопрос

  • Всем привет!

    VS Express 2012, C#.

    Где то в программе меняется значение переменной.
    Программа большая, уследить сложно.
    Как найти?

    То ли в C++, то ли в C# прежних версий

    такая возможность была.
    Уже не помню, как это делалось.
    Сейчас это тоже наверное возможно.

    27 июля 2013 г. 11:30

Ответы

  • не удивлюсь, что можно как-то в отладчике поставить, чтобы останавливалось на записи, или как-то так.

    а первое, что в голову приходит - сделать переменную свойством, и на set { .... = value; } поставить точку останова.

    • Помечено в качестве ответа QazRdx 28 июля 2013 г. 9:43
    27 июля 2013 г. 20:33
  • Подобная возможность есть в неуправляемом коде. А вот в C# нет. Если ваша переменная является полем класса и вы не знаете место использования или их очень много, то самый простой метод это предложенный выше:

    private int myVariable;
    public int myVariable
    {
      set
      {
        if (myVariable != value) 
          Debugger.Break;
      }
    }
    "Раньше это было в отладчике - нужно было сформулировать условие останова." - такая возможность была и есть. Но она предназначена для точек которые устанавливаете вы.


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа QazRdx 28 июля 2013 г. 9:43
    28 июля 2013 г. 8:16
    Модератор

Все ответы

  • не удивлюсь, что можно как-то в отладчике поставить, чтобы останавливалось на записи, или как-то так.

    а первое, что в голову приходит - сделать переменную свойством, и на set { .... = value; } поставить точку останова.

    • Помечено в качестве ответа QazRdx 28 июля 2013 г. 9:43
    27 июля 2013 г. 20:33
  • Хорошая идея, спасибо!
    Подождем, может быть кто-нибудь про отладчик раскажет.
    Раньше это было в отладчике -
    нужно было сформулировать условие останова.
    27 июля 2013 г. 21:11
  • Подобная возможность есть в неуправляемом коде. А вот в C# нет. Если ваша переменная является полем класса и вы не знаете место использования или их очень много, то самый простой метод это предложенный выше:

    private int myVariable;
    public int myVariable
    {
      set
      {
        if (myVariable != value) 
          Debugger.Break;
      }
    }
    "Раньше это было в отладчике - нужно было сформулировать условие останова." - такая возможность была и есть. Но она предназначена для точек которые устанавливаете вы.


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа QazRdx 28 июля 2013 г. 9:43
    28 июля 2013 г. 8:16
    Модератор
  • Да, наверное, это было в C++.
    Я этим пользовался, но мне не нравилось,
    что при тестировании быстродействие сильно падает -
    приходилось долго ждать, 
    когда же она протрет и выдаст то, что мне нужно.
    С точками останова по условию все понятно.
    Для моей задачи лучше аксессоров get - set наверное и не придумаешь.
    Всем спасибо!
    28 июля 2013 г. 9:42