Точка останова, когда переменная принимает определенное значение - PullRequest
4 голосов
/ 22 марта 2010

У меня есть нечто похожее на следующий код ...

void function(int x)
{
    // complicated operation on x
    blah 
    blah
}

Похоже, что все работает нормально, за исключением случаев, когда x является определенным значением, скажем, "273". Но x = 273 - это редкое событие, в 99,999% случаев это другое значение. Теперь я хочу наблюдать за событиями, когда эта функция вызывается с x = 273, поэтому я хотел бы вставить точку останова, которая получает удар только по x, это значение. Возможно, я мог бы сделать это так:

void function(int x)
{
    if (x == 273)
    {
        // put breakpoint on this line.
    }
    // complicated operation on x
    blah 
    blah
}

Проблема в том, что, по-видимому, компилятор оптимизирует этот оператор "если", потому что он ничего не делает. Поэтому мой вопрос заключается в том, что я должен поместить в оператор «if», чтобы убедиться, что он скомпилирован во что-то ... или я должен отслеживать случай x == 273 каким-то совершенно другим способом.

Ответы [ 5 ]

8 голосов
/ 22 марта 2010

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

Для этого установите точку останова в начале функции. Затем щелкните правой кнопкой мыши и выберите «Условие». Затем добавьте следующее выражение

x == 273

Теперь вы можете отлаживать это без изменения вашего исходного двоичного файла.

3 голосов
/ 22 марта 2010

Может быть, просто использовать условную точку останова? Посмотрите здесь как его настроить.

0 голосов
/ 22 марта 2010

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

{
   int i = 42;
}

Это оптимизировано, но я могу получить предупреждение компилятора о неиспользуемой переменной. Но условная точка останова (другие ответы), вероятно, лучше в этом случае

0 голосов
/ 22 марта 2010
if (x == 273)
{
    volatile int tmp = 0; // This is not get optimized
}
0 голосов
/ 22 марта 2010

Создайте новую условную точку останова (щелкните точку останова правой кнопкой мыши и выберите «Условие ...») и введите

x == 273

как условие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...