Лучше (если возможно) использовать контрольную точку памяти, чем условную контрольную точку. Условная точка останова (как уже указывали другие) должна запускать дополнительный код каждый раз, когда указатель выполнения проходит эту точку, чтобы определить, будет ли он сломан или нет - очевидно, это требует дополнительного времени. Точка наблюдения за памятью определенного типа получает возможность использовать определенные специальные аппаратные регистры - существует ограничение на количество точек наблюдения, которые вы можете установить для ускорения, но если вы можете их использовать, штраф за скорость почти отсутствует.
Точка наблюдения за памятью устанавливается с помощью окна точки останова. Вы устанавливаете его не на строку кода, а на адрес в памяти. Это предполагает очевидное ограничение, оно работает только для вещей, адрес которых вы можете фактически использовать, таких как глобальные переменные и динамически выделенные области памяти (используя new
и т. Д.). Вы ограничены в том, сколько памяти вам разрешено наблюдать (исходя из процессора, я думаю, вы, вероятно, получите более или менее специальные регистры).
На самом деле я сейчас не сижу перед VS, а грубо говоря, вы щелкаете правой кнопкой мыши в окне точек останова и выбираете что-то вроде «новой точки останова данных». Затем вы вводите адрес памяти и размер в байтах. Всякий раз, когда значение меняется, ваша точка наблюдения будет срабатывать. Это особенно полезно для выяснения проблем повреждения памяти.