Как найти строку с реальной проблемой в моем коде с помощью Application Verifier?
Сейчас я пытаюсь использовать этот инструмент отладки 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 ответа
Как правило, когда точки прерывания достигаются таким образом (через AV или необработанное исключение и т. Д.) Внутри отладчика, появляется зеленая стрелка, указывающая на строку кода. Эта стрелка указывает на следующий оператор, который будет выполнен, когда поток вернется из текущей функции. Возможно, эта зеленая стрелка указывает на строку, где вы написали "s = 1", но на самом деле код, вызывающий проблемы, - это строка над ней. Теперь я не вижу ваш код, поэтому точно не знаю точно, и мне не хватает представителя, чтобы оставить комментарий - но это легко проверить при следующем достижении точки останова.
Я готов поспорить, что s
НЕ является "простой" переменной. Я гораздо больше склонен верить, что это что-то вроде этого:
class Foo;
int s;
void Bar() {
s = 1;
}
};
Конечно, это выглядит просто s=1
утверждение, но на самом деле это this->s=1
заявление. И если this
неверный указатель, this->s
тоже не правильная переменная.