Как я могу остановить выполнение в Отладчике Visual Studio, когда переменная члена парламента, не занимающего официального поста изменяет значение?

5 ответов

То, что Вы ищете, не возможно в управляемом коде. В C++ это известно как точка прерывания по данным. Это позволяет Вам повреждаться каждый раз, когда блок памяти изменен под управлением программой. Но это только доступно в чистом собственном коде C++.

Короткая версия того, почему это не реализовано, - то, что это намного более твердо в управляемом коде. Собственный код хорош и предсказуем. Вы создаете память, и она не перемещается, если Вы не создаете новый объект (или явно скопируйте память).

Управляемый код намного более сложен, потому что это - собравший "мусор" язык. CLR обычно перемещает объекты в памяти. Поэтому просто наблюдение небольшого количества памяти не достаточно хорошо. Это требует взаимодействия GC.

Это - только одна из проблем с реализацией управляемых точек останова.

3
ответ дан 15 December 2019 в 06:36
поделиться

Я предполагаю, что Вы пытаетесь сделать это, потому что Вы хотите видеть, откуда изменения в значении произошли. Вы уже заявили способ, которым я всегда делал это: создайте свойство и повредите на съемочной площадке средство доступа (за исключением того, что необходимо затем всегда использовать то средство доступа набора для этого для работы).

В основном я сказал бы что, так как частное поле является только устройством хранения данных, которое Вы не можете повредить на нем, потому что частное поле не является вскрываемой инструкцией.

0
ответ дан 15 December 2019 в 06:36
поделиться

Как прокомментированный ChrisW. Можно установить 'Точку прерывания по данным', но только для собственного компонента (неуправляемый) код. Сборщик "мусора" переместит выделенные блоки памяти вокруг, когда сборщик "мусора" будет работать. Таким образом точки прерывания по данным не возможны для управляемого кода.

Иначе, нет. Необходимо инкапсулировать доступ к объекту, для которого Вы хотите 'повредиться на, изменяют'. Так как это уже - член парламента, не занимающий официального поста, я предлагаю предложение следующего Kibbee установки точек останова везде, где его используемый.

0
ответ дан 15 December 2019 в 06:36
поделиться

Единственным путем я могу думать, действительно делают это, должен щелкнуть правой кнопкой по переменной, и выбор "Находит все ссылки". После того как это находит все ссылки, можно создать новую точку останова в каждой точке в коде, где переменной присваивают значение. Это было бы вероятная работа вполне прилично, если Вы не передавали переменную в в отношении другой функции и изменяли значение там. В этом случае Вам был бы нужен некоторый способ наблюдать отдельный момент в памяти для наблюдения, когда это изменилось. Я не уверен, существует ли такой инструмент в VS.

0
ответ дан 15 December 2019 в 06:36
поделиться

Помимо продвижения количества к полю и установке точки останова на съемочной площадке метод поля, там какой-либо другой способ сделать это?

Сделайте это свойством другого класса, создайте экземпляр класса и установите точку останова на свойстве.

Вместо...

test()
{
   int i = 3;
   ...etc...
   i = 4;
}

... иметь...

class Int
{
  int m;
  internal Int(int i) { m = i; }
  internal val { set { m = value; } get { return m; } }
}

test()
{
  Int i = new Int(3);
   ...etc...
   i.val = 4;
}

Вещь состоит в том, что с помощью C# фактическая ячейка памяти всего перемещается постоянно: и поэтому отладчик не может легко использовать 'повреждение ЦП на доступе к памяти' отладка регистра, и это легче для отладчика к, вместо этого, реализуйте точку останова участка кода.

0
ответ дан 15 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: