如何使用Application Verifier在我的代码中找到真正的问题行?

时间:2010-06-16 21:59:28

标签: c++ windows visual-studio-2008 application-verifier

我现在正在尝试使用这个Application Verifier调试工具,但我被困住了,首先:它在一个简单的变量设置行(s = 1;例如)的行中断了程序

其次,现在当我在调试器下运行这个程序时,我的程序似乎改变了它的行为:我正在绘制图像,现在其中一种颜色已经改变了o_O,我没有画出的图像的所有部分,将#C0000CD的颜色更改为#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 个答案:

答案 0 :(得分:1)

通常,当调试器内部出现断点(通过AV或未处理的异常等)时,会出现一个指向一行代码的绿色箭头。该箭头指向线程从当前函数 返回时要执行的 next语句。也许这个绿色箭头指向你写“s = 1”的行,但实际上有问题的代码是它上面的行。现在我看不到你的代码,所以我无法确切地知道并且我没有足够的代表来发表评论 - 但是下次断点被击中时这很容易检查。

答案 1 :(得分:0)

我愿意打赌s不是一个“简单”的变量。我更有可能相信它是这样的:

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

当然,它看起来像一个简单的s=1语句,但实际上它是一个this->s=1语句。如果this是无效指针,则this->s也不是适当的变量。