Перерыв при изменении значения с помощью отладчика Visual Studio



есть ли способ поместить часы на переменную и иметь только разрыв Visual Studio, когда это значение изменяется?



Это сделает его гораздо легче найти сложные государственные вопросы.



можно ли это сделать?



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

572   11  

11 ответов:

в меню Visual Studio 2005:

Debug ->Новая Точка Останова ->Новая Точка Останова По Данным

введите:

&myVariable

вы также можете выбрать явное нарушение в коде:

// Assuming C#
if (condition)
{
    System.Diagnostics.Debugger.Break();
}

от MSDN:

отладчик.Ломать: Если отладчик не подключен, пользователи спросил, хотят ли они прикрепить отладчик. Если да, то отладчик начатый. Если отладчик подключен, отладчик сигнализируется с пользователем событие точки останова и отладчик приостанавливает выполнение процесса просто как будто точка останова отладчика была удар.

Это только a но это запасной вариант. Установка условной точки останова в Visual Studio, как описано в других комментариях, является лучшим выбором.

очень старый пост, но в случае если кто-то не знает...

на Visual Studio 2015, вы можете поместить точку останова на set метод доступа к автоматически реализованному свойству и отладчик сломается при обновлении свойства

public bool IsUpdated
{
    get;
    set;    //set breakpoint on this line
}

обновление

альтернативно; @AbdulRaufMujahid указал в комментариях, что если свойство auto implemented находится в одной строке, вы можете поместить курсор на get; или set; и нажмите F9 и точка останова будет размещена соответственно. Мило!

public bool IsUpdated { get; set; }

представьте, что у вас есть класс с именем A со следующим объявлением.

class A  
{  
    public:  
        A();

    private:
        int m_value;
};

вы хотите, чтобы программа остановится, когда кто-то изменяет значение "m_value".

перейти к определению класса и поставить точку останова в конструкторе А.

A::A()
{
    ... // set breakpoint here
}

как только мы остановили программу:

Отладка - > Новая Точка Останова - > Новая Точка Останова Данных ...

адрес: &(this - >m_value)
Количество байтов: 4 (потому что int имеет 4 байт)

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

вы можете сделать то же самое с унаследованными классами или составными классами.

class B
{
   private:
       A m_a;
};

адрес: &(this - >m_a. m_value)

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

например:

// to know the size of the word processor,  
// if you want to inspect a pointer.
int wordTam = sizeof (void* ); 

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

изменить переменную в свойство и добавьте точку останова в метод set. Пример:

private bool m_Var = false;
protected bool var
{
    get { 
        return m_var;
    }

    set { 
        m_var = value;
    }
}

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

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

Я помню, как вы описывали его с помощью Visual Basic 6.0. В Visual Studio единственный способ, который я нашел до сих пор, - это указать условие останова.

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

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

вы, вероятно, можете сделать умное использование DebugBreak()

вы можете дополнительно перегрузить оператор = для переменной и можете поместить точку останова внутри перегруженной функции на определенное условие.

Comments

    Ничего не найдено.