Как найти строку с реальной проблемой в моем коде с помощью Application Verifier? - PullRequest
1 голос
/ 17 июня 2010

Я сейчас пытаюсь использовать этот инструмент отладки Application Verifier, но я застрял, прежде всего: он разбивает программу на строку, которая является простой строкой набора переменных (например, s = 1;)

Во-вторых, теперь, когда я запускаю эту программу под отладчиком, моя программа, похоже, изменила свое поведение: я рисую изображение, и теперь один из цветов изменился o_O, все те части изображения, на которых я не рисую, изменил цвет на #CDCDCD, когда он должен быть # 000000, и я уже установил цвет по умолчанию на ноль, тем не менее он становится # CDCDCD.

Как я могу это понять?

Вот вывод, который мне дал AV:

VERIFIER STOP 00000002: pid 0x8C0: Access violation exception. 

    14873000 : Invalid address causing the exception
    004E422C : Code address executing the invalid access
    0012EB08 : Exception record
    0012EB24 : Context record

AVRF: Noncontinuable verifier stop 00000002 encountered. Terminating process ... 
The program '[2240] test.exe: Native' has exited with code -1073741823 (0xc0000001).

Ответы [ 2 ]

1 голос
/ 16 декабря 2014

Как правило, когда точки прерывания достигаются таким образом (через AV или необработанное исключение и т. Д.) Внутри отладчика, появляется зеленая стрелка, указывающая на строку кода. Эта стрелка указывает на следующий оператор , который будет выполнен, когда поток вернется из текущей функции . Возможно, эта зеленая стрелка указывает на строку, где вы написали "s = 1", но на самом деле код, вызывающий проблемы, - это строка над ней. Теперь я не вижу ваш код, поэтому не могу точно знать наверняка, и у меня недостаточно представителя для публикации комментария, но это легко проверить при следующем достижении точки останова.

0 голосов
/ 17 июня 2010

Я готов поспорить, что s НЕ является «простой» переменной.Я, скорее всего, поверю, что это что-то вроде этого:

class Foo;
    int s;
    void Bar() {
        s = 1;
    }
};

Конечно, это выглядит как простое утверждение s=1, но в действительности это утверждение this->s=1И если this является неверным указателем, this->s также не является правильной переменной.

...